2011-02-11 99 views
80

我正在编写一个iPhone应用程序作为业余爱好项目,它将需要一个Web服务来提供它的数据。这与我在工作中所做的没有什么不同,但是在工作中我只写视图和控制器。其他人负责编写模型,通常客户提供Web服务。如何编写REST API?

我之前做过一些网络编程,当时大家都在使用MySQL和PHP,所以我的技能有点过时,但我相信我可以使用我已经知道的技术来做到这一点。但是,我不想浪费时间使用过时的工具。我发现最先进的技术将是编写一个REST API。我一直在想,应该有一些非常好的框架,只要你定义了一个模型,就可以为你提供一个带有CRUD功能的REST API。

我想我的问题是:什么是获得REST API启动和运行的最快方法?我真的只想专注于编写iPhone应用程序,而不是花太多时间在这个API上。如果我能够获得网络管理和修订历史,那将是非常棒的。我还应该补充说API不应该是公开的,因此对身份验证的支持也会很好。

只是要清楚。我不介意一个PHP框架。事实上,它可能会更好,因为我知道我目前的托管支持它。

+1

REST可能不是你真正想要的:https://medium.com/@trevorhreed/you-re-api-isn-t-restful-and-that-s-good-b2662079cf0e – Trevor 2016-04-02 00:00:36

+2

你可以使用[这66行PHP脚本](https://github.com/mevdschee/php-crud-api/blob/master/extras/core.php)我写了。 – mevdschee 2017-02-07 18:51:53

+0

回答5年后8-) – JustOnUnderMillions 2017-04-28 11:53:37

回答

7

只是为了让您知道:

我结束了使用Ruby on Rails。

编辑:由于这个答案已经downvoted不提供背后on Rails的选择Ruby和还就如何写它一个REST API没有说明的原因,我想我会给你我的动力和一些简单的指令。

我开始阅读一本关于Ruby on Rails的书,并意识到我需要做的就是使用脚手架,并且我免费获得了JSON REST API。

这里有一个很好的指南,让你开始:http://guides.rubyonrails.org/getting_started.html

当你有你的Ruby on Rails环境和运行,创建REST API并不比跑步难:

$ rails generate scaffold Post name:string title:string content:text 

(例)我还发现Rails非常容易并且可以自由部署到heroku,这意味着我不必为我非常基本的低流量REST API托管。为什么我很高兴能够使用Ruby on Rails,还有很多其他原因,但这超出了这个问题的范围。

0

您应该使用任何适合Web服务的语言。任何可以制定REST响应请求的语言都可以。

也就是说,如果你想快速运行某些东西,我建议在Google App Engine上使用Python。它是免费的,如果你愿意,你可以使用Java而不是Python。 App Engine支持使用OpenID和/或Google帐户进行身份验证(不确定它们是否相互排斥),以便让代码更容易。

至于在iOS设备上发出请求,我建议使用ASIHTTPRequest

3

Python怎么样?

我会使用Python,Django和Piston。

  1. 我使用inspectdb生成从 存在DB Django模型。
  2. Django admin添加到您的模型中。
  3. Django Piston添加到您的应用。
  4. 利润。

与Python或Django的没有经验或许它会带你每天要开发这一解决方案,所有的代码是单元测试和proved to work

+1

哇活塞上的代码看起来很干净... – JGallardo 2017-02-14 01:38:30

1

检出遵循MVC的以下PHP类。 http://www.phpclasses.org/package/5080-PHP-Implement-REST-Web-services-servers.html

希望这会有所帮助。

+7

我强烈建议不要使用** phpclasses.org上的任何**。该网站上的许多课程都是未经测试的,不安全的,由脚本小子编写。看看更像PEAR或Zend的地方 – Dmitri 2011-02-11 20:24:15

+12

超过3000名PHP开发者将软件包提交给PHPClasses网站。有些人比其他人更有能力。许多人甚至还是PEAR和Zend的贡献者。告诉人们不要仅仅因为你发现你说的一些软件包没有被测试和不安全而使用在该站点分发的软件包就是纯粹的偏见。由@src推荐的软件包恰好是最受欢迎的软件包。如果你在查看包代码或者至少是用户评分之前就决定更加明智一些,因为它只是在网站上发布而已。 – mlemos 2011-03-29 05:19:30

0

如果您已经知道PHP,那么PHP/MySQL后端没有任何问题。您可以发送的iPhone兼容的plist XML格式的所有响应,瞬间转响应到的NSDictionary/NSArray中/ NSNumber的数据结构的代码这个简短的片段:

NSString *response = [request responseString]; 
NSData* plistData = [response dataUsingEncoding:NSUTF8StringEncoding]; 
NSPropertyListFormat format; 
NSString *errorStr; 
NSDictionary* plist = [NSPropertyListSerialization propertyListFromData:plistData 
                 mutabilityOption:NSPropertyListImmutable 
                   format:&format 
                 errorDescription:&errorStr]; 

我也用ASIHTTP包形成的网址,发送异步requets,并接收响应,我强烈推荐:

http://allseeing-i.com/ASIHTTPRequest/

8

我在ZEND Framework使用Zend_Rest_Controller编程的REST API,在iPhone上我用ASIHTTPRequest。我的经验与两者都很好。一开始,我在设置ZEND并将它连接到mySQL时遇到了一些麻烦,但是一旦我想出了如何做到这一点,我就能够非常快速地编写API。如果您有任何其他问题,我可以与您分享更多信息。

编辑:似乎没有关于Zend_Rest_Controller的官方文档。 This link描述了如何使用它来创建你的API。您只需在您的子类的init()中禁用渲染并为每个REST调用实现方法。

+0

我在Zend站点上看不到任何ZEND_Rest_Controller。我看到ZEND_Rest_Server。这是你说的那个吗? – Dmitri 2011-02-11 20:27:28

40

编辑:

下面这显然是好3年不再工作,所以我去了,发现了一些新的教程,我认为是要坚持一段时间了链接。这些都在Ray Wenderlich网站上,这是一个备受尊敬的ios开发者教程网站。第一条实际引用的下方损坏的链接,但它自身内部完成:

How To Write A Simple PHP/MySQL Web Service for an iOS App

,第二个有一个小的转折吧。它在后端和AFNetworking上使用了parse.com。这两者都非常出色。

How To Synchronize Core Data with a Web Service – Part 1


我已经找到的方式的条款退机固定以下断开的链接。人们似乎喜欢这些链接,所以我会保留它们。上面的链接应该提供更多的思考。


我正在做与我的iPhone应用程序完全相同的事情。我发现在PHP构建RESTful API的这篇文章:

https://web.archive.org/web/20130910164802/http://www.gen-x-design.com/archives/create-a-rest-api-with-php/

而且还有一个后续的文章在这里:

https://web.archive.org/web/20130323001500/http://www.gen-x-design.com/archives/making-restful-requests-in-php/

与的底部的链接到源代码文章。

0

另一种选择是restSQL,一个超轻量级的持久性框架。请参阅http://restsql.org。它支持MySQL和PostgreSQL,并运行在标准的Java EE容器中,例如Apache Tomcat。

restSQL是一个非常传统的数据访问层。 restSQL不是数据库的面向对象的视图。它呈现关系数据库表的平面或层级“视图”。这些视图可通过基于REST的简单HTTP或Java API进行查询和更新。HTTP接口基于REST原则,它使用HTTP的内置功能,而不是从它们中抽象出来。

你想要一个'具有CRUD功能的REST API',这正是restSQL的甜蜜点。你可以在没有代码的情况下这样做。只需通过XML文件定义SQL资源,并开始使用全面的CRUD功能对它们进行HTTP调用。

6

我跟着一个很简单的教程用PHP创建RESTful API的:

Corey Maynard - Creating a RESTful API with PHP

The主要概念包括:

  • 一个抽象类处理该URI的解析和返回响应,并且
  • 它由刚端点的API的
  • 一个具体类。