一個RESTful API應該完全發現和自動記錄。你只需要一個URL,並且鏈接到它的所有內容都應該描述自己。聽起來像是一個烏托邦,但它是可行的。
例如,讓我們開始了一個計算器樣網址:http://restfuloverflow.com(舉例)
你一個RESTful資源做的第一件事是OPTIONS請求。你總是需要包括一個Accept頭指示服務器到最合適的MIME類型迴應:
OPTIONS * HTTP/1.1
Accept: text/html, text/xml, application/json
Host: restfuloverflow.com
服務器應指示什麼可以對URL做客戶端:
HTTP/1.1 200 Ok
Allow: GET, POST, PUT, DELETE, OPTIONS, TRACE, PATCH
這是RESTful API,告訴你這個服務支持這些方法。你會嘗試的第一個類似於下面的請求。用瀏覽器打開API的用戶應該以類似的方式工作。
GET/HTTP/1.1
Accept: text/html, text/xml, application/json
Host: restfuloverflow.com
然後,服務器應該返回指向相關資源的一些鏈接,如果有的話:
HTTP/1.1 200 Ok
Content-Type: text/xml
<?xml version="1.0">
<qa>
<link href="/questions" title="Questions"/>
<link href="/tags" title="Tags"/>
<link href="/users" title="Users"/>
</qa>
的HTML版本應該使用<a>
鏈接和JSON響應採用JSON-架構links
屬性。
比方說,客戶現在決定它想知道如何處理的問題做:
OPTIONS /questions HTTP/1.1
Host: restfuloverflow.com
Accept: text/html, text/xml, application/json
一個可能的反應可能是:
HTTP/1.1 200 Ok
Allow: GET, POST
Content-Type: text/xml
<?xml version="1.0">
<xsd:element name="question">
<!-- XML Schema describing a question -->
</xsd:element>
那麼,服務器告訴我們,這是可能的GET和發佈一個新問題。它還告訴我們如何通過提供XML Schema來解決XML中的問題。可以爲JSON提供JSON-SCHEMA,在HTML中可以提供新問題的表單。
比方說,用戶希望得到的問題:
GET /questions HTTP/1.1
Host: restfuloverflow.com
Accept: text/html, text/xml, application/json
然後,服務器的響應:
HTTP/1.1 200 Ok
Content-Type: text/xml
<?xml version="1.0">
<questions>
<link href="https://stackoverflow.com/questions/intersting" title="Intersting Questions"/>
<link href="https://stackoverflow.com/questions/hot" title="Hot Questions"/>
</questions>
現在,一切都再掛。事情繼續以服務描述自己的方式繼續下去。 Netflix API遵循類似的原則,但缺少一些自動發現功能。
This Brazillian Government API描述了自己使用RDF。這是我見過的最好的RESTful樣本之一。嘗試將.rdf更改爲.xml,.json或.html。 (全都用葡萄牙語,對不起)。
PHP中RESTful API的最佳工具是Respect\Rest。它具有我在這裏描述的大部分工作流程已經引導,新功能即將到來(它仍然在0.4x版本)。
爲RESTful應用程序構建文檔系統的成本與構建RESTful應用程序相同。這就是爲什麼有那麼少的工具,通常他們不太好。
與[this one]相關(http://stackoverflow.com/questions/2756978/how-to-document-a-symfony-based-rest-api-similar-to-enunciates-documentation-c/12609606 #12609606)和[此另一個(http://stackoverflow.com/questions/8872276/auto-generate-rest-api-docs-from-symfony?rq=1),儘管後者似乎欺騙了前者。 – Patrick 2012-09-27 16:06:45