构建一个简单的RESTful api

时间:2010-07-21 02:45:17

标签: php api rest authentication

我想按照REST原则快速制作API - 我已经构建了一个简单的Web应用程序。 API将首先用于与iPhone应用程序连接。 API只需要处理一些基本调用,但都需要身份验证,没有任何内容是公共数据。

  • 登录/验证用户
  • 获取用户组中的记录列表
  • 再次获取列表,仅显示已更改的内容(新添加或更新)
  • 更新记录

那么,遵循REST原则,我会设置uri方案吗?:

  • mysite.com/api/auth(POST?)
  • mysite.com/api/users(GET)
  • mysite.com/api/update(POST?)

并且响应将以XML开头,JSON也是稍后。

  1. 在网站上,用户使用电子邮件和密码登录。我是否应该让他们在个人资料页面上获得“令牌”以传递每个api请求? (会使独立的'/ auth'URI资源变得多余)。

  2. 构建响应xml的最佳实践?看起来像REST,你应该返回200 ok和XML或实际正确的状态代码,即401等

  3. 任何一般指示赞赏。

3 个答案:

答案 0 :(得分:4)

1- for auth,您可能需要考虑像http-basic或digest auth(注意 - 如果不是通过https,则基本上是不安全的)

用于网址方案:

    如果您利用基本或摘要,则不需要
  • / api / auth。
  • / api / group / groupname /可能更规范
  • / api / update通常以/ api / users / username(POST)完成,添加新数据 - 资源是用户 - POST是动词
  • 否则,基本上你的API看起来很健全,很大程度上取决于组是否是分层的,用户必须住在一个组中 - 如果是这样,你的网址应该反映出来并且可以导航。

2-状态代码应反映状态 - 200为OK,401为拒绝访问,404为未找到,500为错误处理。通常,如果您有一个好的请求,您应该只返回XML记录

答案 1 :(得分:1)

API中的身份验证始终通过在请求标头中发送一些身份验证令牌来工作。即,即使使用单独的/auth登录方法,您也会将一些令牌(可能是cookie)返回给用户,这需要与每个请求一起发送。

HTTP已为此目的提供专用的headerAuthorization 最基本的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规范并尽可能地遵循它。