如何编写REST API?

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

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

我想我的问题是:什么是获得REST API启动和运行的最快方式? 我真的只是想专注于编写iPhone应用程序,而不是花太多时间在这个API上。 如果我也可以获得Webpipe理和修订历史,那将是非常好的。 我还要补充一点,API不应该是公开的,所以对authentication的支持也会很好。

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

编辑:

下面显然是好的3年的链接不再工作,所以我去了,发现了一些新的教程,我认为将坚持一段时间。 这些都在Ray Wenderlich网站上,这是一个非常受人尊敬的ios开发者教程网站。 第一篇文章实际上引用了下面的断开的链接,但它本身是完整的:

如何为iOS应用程序编写简单的PHP / MySQL Web服务

第二个有一点扭曲。 它使用后端和AFNetworking parse.com。 这两者都非常出色。

如何使核心数据与Web服务同步 – 第1部分


我通过在回机器中find文章来修复下面的链接。 人们似乎喜欢这些链接,所以我会保留它们。 上面的链接应该提供更多的思考。


我正在做我的iPhone应用程序完全相同的事情。 我发现这篇文章是关于在PHP中构build一个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/

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

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

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

只是让你知道:

我结束了使用Ruby on Rails。

编辑:由于这个答案已经downvoted不提供selectRuby on Rails的原因,也没有关于如何编写一个REST API的指示,我想我会给你我的动机和一些简单的指示。

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

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

当您启动并运行Ruby on Rails环境时,创buildREST API并不比运行困难:

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

(从上面的链接的例子)我也发现,Rails是非常容易和自由部署到Heroku ,这意味着我不必支付我非常基本,低stream量,REST API托pipe。 为什么我很高兴能够使用Ruby on Rails,还有很多其他的原因,但这超出了这个问题的范围。

我遵循一个非常简单的教程,用PHP创buildRESTful API:

Corey Maynard – 用PHP创build一个RESTful API

主要概念包括:

  • 一个处理URIparsing并返回响应的抽象类
  • 一个只包含API端点的具体类。

那么Python呢?

我会使用Python,Django和Piston。

  1. 我会使用inspectdb从现有的数据库生成Django模型。
  2. 将Djangopipe理添加到您的模型。
  3. 将Django活塞添加到您的应用程序。
  4. 利润。

没有经验的Python或Django可能会花你一天的时间来开发这个解决scheme,所有的代码都经过了unit testing,并被certificate是可行的 。

如果你想使用PHP,我build议在Phil Sturgeon的REST服务器上使用CodeIgniter框架:

http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2

https://github.com/philsturgeon/codeigniter-restserver

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

希望这可以帮助。

如果您已经了解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包形成URL,发送asynchronous请求,并接收响应,我强烈build议:

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

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

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

至于在iOS设备上的请求,我build议使用ASIHTTPRequest 。

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

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

你想要一个'具有CRUDfunction的REST API',这正是restSQL的甜蜜点。 你可以做到这一点,没有代码。 简单地通过XML文件定义您的SQL资源,并开始使用完整的CRUDfunction对它们进行HTTP调用。