一种RESTful API应该是完全可发现和自动文档化的。您只需要一个URL,其余链接应该自我描述。听起来像是理想状态,但这是可行的。
例如,让我们以类似stackoverflow的示例URL为起点:http://restfuloverflow.com(仅供说明)
在RESTful资源上,您首先要做的是OPTIONS请求。您始终需要包含一个Accept header来指示服务器响应最适合的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-Schema 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和POST提交一个新的问题。它还通过提供XML Schema来告诉我们问题长什么样子。针对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="/questions/intersting" title="Intersting Questions"/>
<link href="/questions/hot" title="Hot Questions"/>
</questions>
现在,一切都再次链接在了一起。这个东西以一种描述自己的方式继续着。Netflix API 遵循类似的原则,但缺乏一些自动发现功能。
这个巴西政府 API 使用 RDF 描述自己。这是我见过的最好的 RESTful 示例之一。尝试将 .rdf 更改为 .xml、.json 或 .html。(所有内容都是葡萄牙语的,对此抱歉)。
PHP 中最好的 RESTful API 工具是 Respect\Rest。它已经预设了我在这里描述的大部分工作流程,并且正在推出新功能(目前还处于 0.4x 版本)。
构建 RESTful 应用程序的文档系统的成本与构建 RESTful 应用程序的成本相同。这就是为什么像这样的工具很少,而且通常不那么好的原因。