我想按照REST原则快速制作API - 我已经构建了一个简单的Web应用程序。 API将首先用于与iPhone应用程序连接。 API只需要处理一些基本调用,但都需要身份验证,没有任何内容是公共数据。
那么,遵循REST原则,我会设置uri方案吗?:
并且响应将以XML开头,JSON也是稍后。
在网站上,用户使用电子邮件和密码登录。我是否应该让他们在个人资料页面上获得“令牌”以传递每个api请求? (会使独立的'/ auth'URI资源变得多余)。
构建响应xml的最佳实践?看起来像REST,你应该返回200 ok和XML或实际正确的状态代码,即401等
任何一般指示赞赏。
答案 0 :(得分:4)
1- for auth,您可能需要考虑像http-basic或digest auth(注意 - 如果不是通过https,则基本上是不安全的)
用于网址方案:
2-状态代码应反映状态 - 200为OK,401为拒绝访问,404为未找到,500为错误处理。通常,如果您有一个好的请求,您应该只返回XML记录
答案 1 :(得分:1)
API中的身份验证始终通过在请求标头中发送一些身份验证令牌来工作。即,即使使用单独的/auth
登录方法,您也会将一些令牌(可能是cookie)返回给用户,这需要与每个请求一起发送。
HTTP已为此目的提供专用的header:Authorization
最基本的HTTP“授权”是HTTP Basic access authentication:
Authorization : Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Digest Authentication是另一种更安全的方案。您可以将此标头字段用于您想要的任何形式的身份验证,甚至是您自定义的身份验证。
Authorization : MyCustomAuthentication foo:bar:n293f82jn398n9r
您可以在此字段中发送上述登录令牌。或者您可以使用请求签名方案,其中某些请求字段与用户的密码一起散列,基本上发送密码而不发送密码(类似于摘要式身份验证,但您可以使用比md5
更好的内容)。这消除了单独的登录步骤。 AWS employs this method
对于一般的API,请充分利用HTTP status codes来表明正在发生的事情。
答案 2 :(得分:0)
你通常走在正确的轨道上。 URI方案应该基于资源的概念,你应该使用适当的方法来完成工作。
所以,GET来检索信息。 POST(或者可能是PUT)来创建/更改资源。 DELETE for well,删除。并且HEAD检查元数据。
XML的结构与RESTful API没有太大关系,假设它不需要状态管理。那就是说,你有正确的想法。如果这是一个好的请求,则返回所需的XML(对于GET请求)和状态代码200.如果这是一个错误的请求,您也可能(在某些情况下需要)返回除状态代码之外的其他内容。基本上,熟悉HTTP规范并尽可能地遵循它。