2011-02-11 143 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的
  • 一個具體類。