如何编写REST API?


82

我正在将iPhone应用程序写为一个业余项目,它将需要一个Web服务来为其提供数据。它与我在工作中没有太大区别,但是在工作中我只编写视图和控制器。其他人负责编写模型,通常由客户提供Web服务。

以前,当每个人都使用MySQL和PHP时,我已经做过一些Web编程,所以我的技能有些过时了,但是我有信心,我可以使用我已经知道的技术来完成它。但是,我不想浪费时间使用过时的工具。我发现最新的技术是编写REST API。我当时认为应该有一些不错的框架,一旦定义了模型,它们几乎只会为您提供具有CRUD功能的REST API。

我想我的问题是:建立和运行REST API的最快方法是什么?我真的只想专注于编写iPhone应用程序,而不要花太多时间在此API上。如果我也能获得Web管理和修订历史记录,那将是很棒的。我还应该补充一点,该API不应公开,因此对身份验证的支持也将非常出色。

只是要清楚。我不介意PHP框架。实际上,它可能会更好,因为我知道我当前的主机支持它。


1
REST可能不是您真正想要的东西:medium.com/@trevorhreed/…–
Trevor

2
您可以使用我编写的66行PHP脚本
mevdschee

5年后回答8
JustOnUnderMillions 17-4-28

Answers:


42

编辑:

下面的链接似乎有效了3年,这些链接不再起作用,所以我去找了一些新教程,我​​认为它们会持续一段时间。这些位于Ray Wenderlich网站上,这是一个非常受人尊敬的ios开发教程网站。第一篇文章实际上引用了下面断开的链接,但它本身是完整的:

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

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

如何将核心数据与Web服务同步–第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/

在文章底部带有指向源代码的链接。


2
这些链接似乎正在超时。如果不确定是否发生在其他任何人身上,我不确定。:/
Augie Gardner

8

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

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


我在Zend网站上看不到任何ZEND_Rest_Controller。我看到了ZEND_Rest_Server。这是你在说的吗?
德米特里(Dmitri)

2
在这里看看如何使用zend_rest_controller的一个好的开始:techchorus.net/create-restful-applications-using-zend-framework。使用该类轻松创建一个REST API
Philipp

这似乎或多或少正是我所需要的。我会尝试一下,如果我成功了,我会接受这个作为我的答案。谢谢。
Erik B

4
我猜他没有成功...:D
user151841

8

只是让你知道:

我最终使用了Ruby on Rails。

编辑:由于未提供选择Ruby on Rails背后的原因,并且也没有提供有关如何使用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合作还有很多其他原因,但这超出了这个问题的范围。


10
给自己一个答案,然后给它一个复选标记。
thenetimp'3

29
@thenetimp回答自己的问题没什么不好的。实际上,它是受鼓励的,只要它是正确的答案并且没有其他人给出过。您不会因为接受自己的答案而获得任何代表,因此我真的看不到您可能会反对它。
Erik B

3
如果您给出选择理由,那就更好了
mustafa

4
@Nate我会向想要编写REST API的任何人推荐Ruby on Rails,因此我不会删除答案。但是,我阅读了您的反馈并更新了我的答案。我希望它能使您满意。
Erik B

2
@DennisKrøger,如果问题是“如何编写REST api?” 那么“我使用RoR。这是他们脚手架入门指南”完全是正确的答案。
Mattygabe 2015年


3

那Python呢?

我会使用Python,Django和Piston。

  1. 我会使用inspectdb从您现有的数据库中生成Django模型。
  2. Django管理员添加到模型中。
  3. Django Piston添加到您的应用。
  4. 利润。

由于没有使用Python或Django的经验,开发这个解决方案可能需要一天的时间,并且所有代码都经过了单元测试和证明是可以工作的



1

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

希望这可以帮助。


7
我强烈不鼓励使用phpclasses.org中的任何内容。该站点上的许多类都是未经测试的,不安全的,由脚本小子编写的。看起来更像梨子或Zend之类的东西
Dmitri

13
超过3000个PHP开发人员向PHPClasses站点提交了软件包。有些人比其他人更有能力。许多人甚至还是PEAR和Zend的贡献者。告诉人们不要使用仅在您发现一些未经测试且不安全的软件包的情况下使用该站点中分发的软件包是纯粹的偏见。@src推荐的软件包恰好是最受好评的软件包。如果您只考虑将其分发在站点中,然后决定对所有内容进行归纳,那么如果您查看软件包代码或至少查看用户评分,那将是明智的选择。
mlemos

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包来形成URL,发送异步请求和接收响应,我强烈建议这样做:

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


0

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

就是说,如果您想快速运行某些程序,建议您在Google App Engine上使用Python。它是免费的,并且您可以根据需要使用Java而不是Python。App Engine支持使用OpenID和/或Google帐户(不确定它们是否互斥)进行身份验证,从而使代码编写更容易。

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


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调用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.