我正在開發自己的PHP庫,我想從我的API調用RESTful Web服務。這可以在PHP中完成,如果有的話,這樣做的基礎是什麼?你可以在PHP中使用REST嗎?如果是這樣如何?
回答
由於REST是HTTP協議的相同方法在客戶端 - 服務器體系結構設計中的應用,並且PHP已經非常適合處理諸如GET和POST之類的HTTP協議請求。 PHP特別適合簡化開發REST服務。
記住REST是已存在的相同http模式的應用程序。
因此,如果您目前有做類似的應用程序:
- HTML表單
- PHP程序 在表
- HTML輸出
因此,爲了使地歇息,你會需要:
- 接受參數來自網絡。這很容易,因爲您將以get或post的形式接收參數...所以它基本上是相同的。
- PHP過程
輸出在任一JSON或XML。就是這樣!
很簡單。
現在困難的部分是讓你的API(函數和URL),你會產生程序員友好。
在這種情況下,我建議你看看flickr API作爲一個非常容易被開發者喜歡的例子,並且有很好的文檔。
有關API的更多信息看這個介紹:How to Design a Good API & Why it Matters (Joshua Bloch)
最後一個RESTful API應該也實現了PUT和DELETE HTTP協議的方法時,它是有道理
例如,如果你有api中的一個刪除操作,表示服務應該從http協議接收刪除方法。而不是發送操作參數作爲發佈請求的一部分的更常見的事情。「由於REST是HTTP協議的相同方法在客戶端 - 服務器體系結構的設計中的應用,並且PHP已經很好地處理HTTP協議請求了比如GET和POST,PHP特別適合開發REST服務。「
並且還添加了最後一個注意事項,即當該操作對您的api有意義時,您應該實施適當的PUT或DELETE方法。
-1:對不起,默認情況下沒有語言是REST。例如在REST中,POST請求與GET非常不同,並且您還需要支持DELETE和PUT。 – 2009-10-27 04:20:45
@Jim Ferrans - 爲什麼必須支持DELETE? – 2009-10-27 04:21:51
@elviejo - 如果你看看stackoverflow的url,你會看到一個REST url。這不是PHP在默認情況下在解析中所做的,因爲沒有問號。 – 2009-10-27 04:22:44
你可能想看看這篇文章,後續: http://www.gen-x-design.com/archives/create-a-rest-api-with-php/
你提的問題是非常開放的,因此本教程可能是最好的起點。
上面的鏈接不再工作,所以看看這個教程:
http://net.tutsplus.com/tutorials/other/a-beginners-introduction-to-http-and-rest/
鏈接已損壞。 – kta 2014-01-29 11:05:29
@kaziTanvirAhsan - 謝謝您提供更好的鏈接 – 2014-01-29 15:09:11
不能傷害回去the original source of the term REST,並確保你明白這意味着什麼。
如果你正在考慮客戶端的事情,我會建議檢查馬特Sukowski的PEST。
你會發現在GitHub上的倉庫: https://github.com/educoder/pest
還檢查了這個線程: PHP REST Clients
更新2013年12月13日:
這不能不說是一個活的開源項目,馬特Sukowsky今年夏天把它交給了新的看管人,因爲他沒有覺得自己可以騰出足夠的時間,從那以後有很多很多的提交。所以害蟲是比以往更好的休息在PHP :)
我開發了一個類是PHP本地SoapServer類的REST等效。
您只需包含RestServer.php文件,然後按如下所示使用它。
class Hello
{
public static function sayHello($name)
{
return "Hello, " . $name;
}
}
$rest = new RestServer(Hello);
$rest->handle();
然後你就可以這樣調用:
http://myserver.com/path/to/api?method=sayHello&name=World
(請注意,它無關緊要什麼順序PARAMS查詢字符串提供另外,帕拉姆鍵名稱以及方法名稱不區分大小寫。)
這個類爲什麼不區分HTTP協議? – Isius 2014-02-12 03:50:23
我沒有需要它在我最初使用它的應用程序中。隨意分叉並改進它。 – 2014-02-13 04:57:01
- 1. 你可以在Azure中使用Isapi過濾器嗎?如果是這樣的話?
- 2. 我可以在內嵌html中使用JQuery嗎?如果是這樣如何?
- 3. 你使用的是BizTalk嗎?如果是這樣,你怎麼使用它?
- 4. 在Python中,你可以在三重引號內使用變量嗎?如果是這樣,怎麼樣?
- 5. 你可以使用canvas.getContext('3d')嗎?如果是,如何?
- 6. Web RTC可以在iPhone上使用嗎?如果是這樣,怎麼樣?
- 7. 我可以在JBoss 5上使用JBoss MQ嗎?如果是這樣,怎麼樣?
- 8. 我可以通過php傳遞當前變量嗎?如果是這樣如何?
- 9. FFI可以處理數組嗎?如果是這樣,怎麼樣?
- 10. 可以覆蓋java註釋嗎?如果是這樣?怎麼樣?
- 11. React使用requestAnimationFrame嗎?如果是這樣,它如何使用它?
- 12. 是否可以在WPF中使用Kit3D?如果是這樣,怎麼樣?
- 13. 你可以使用@ViewChild()或類似的路由器插座?如果是這樣?
- 14. 高級可能在Android?如果是的話,你可以給我樣品嗎?
- 15. 我可以在這樣的表單元素中使用php嗎?
- 16. 你可以使用nhibernate來做這樣的子查詢嗎?
- 17. 你可以在Backbone.js集合上設置屬性嗎?如果是這樣,怎麼樣?
- 18. 你可以在Heroku上部署Watir來生成HTML快照嗎?如果是這樣,怎麼樣?
- 19. PHP中的$ _SERVER變量可以由用戶更改嗎?如果是這樣如何?
- 20. 我可以在MVC中實現緩存嗎?如果是這樣的話?
- 21. 你可以舉一個如何使用PHP __method__的例子嗎?
- 22. 如果你可以在Linq中做到這一點,總是可以在SQL中做一些事情嗎?
- 23. 是否可以使用python創建.mobi文件?如果是這樣,怎麼樣?
- 24. 我可以在瓶子模板中使用dojo框架嗎?如果是這樣,怎麼樣?
- 25. 我可以在Specs2測試中使用模擬文件寫入文件嗎?如果是這樣,怎麼樣?
- 26. 這應該在模型中嗎?如果是這樣,我該如何寫這個?
- 27. 可以使用Automapper將類實例綁定到Winforms,如果是這樣,如何?
- 28. 試圖這樣做,你可以下載。用sftp在php
- 29. 我可以着色(黑色)UIKeyboard嗎?如果是這樣,怎麼樣?
- 30. 我可以讀取註冊表權限嗎?如果是這樣,怎麼樣?
+1:抵消downvote,這是一個合理的(如果模糊的)問題。 – 2009-10-27 04:22:23
我想他是在處理PUT和DELETE請求方法,所以我不認爲這是一個無效的問題。 – bart 2014-01-30 10:30:57
讓這個問題繼續你堅持;你想在這裏證明什麼?它擁有超過43,000次瀏覽量,是PHP + REST的第五次谷歌搜索結果。停止殺害這個網站代表什麼 - 無關緊要的問題。 – 2017-01-09 03:54:42