相关疑难解决方法(0)

了解REST:动词,错误代码和身份验证

我正在寻找一种方法来在我的基于PHP的Web应用程序,数据库和CMS中围绕默认函数包装API.

我环顾四周,发现了几个"骨架"框架.除了我的问题的答案,还有Tonic,我喜欢的REST框架,因为它非常轻量级.

我最喜欢REST,因为它简单,并且希望基于它创建一个API架构.我试图了解基本原则并且还没有完全理解它.因此,一些问题.

我理解对吗?

假设我有一个资源"用户".我可以像这样设置一些URI:

/api/users     when called with GET, lists users
/api/users     when called with POST, creates user record
/api/users/1   when called with GET, shows user record
               when called with PUT, updates user record
               when called with DELETE, deletes user record
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是RESTful架构的正确表示吗?

我需要更多的动词

理论上创建,更新和删除可能就足够了,但在实践中我需要更多的动词.我意识到这些内容可以嵌入到更新请求中,但它们是具有特定返回代码的特定操作,我不想将它们全部放入一个操作中.

用户示例中的一些想法是:

activate_login
deactivate_login
change_password
add_credit
Run Code Online (Sandbox Code Playgroud)

我将如何表达RESTful URL架构中的操作?

我的直觉是对像这样的URL进行GET调用

/api/users/1/activate_login 
Run Code Online (Sandbox Code Playgroud)

并期望返回状态代码.

但是,这偏离了使用HTTP动词的想法.你怎么看?

3.如何返回错误消息和代码

REST的美丽很大一部分源于其使用标准HTTP方法.如果出错,我会发出一个包含3xx,4xx或5xx错误状态代码的标头.对于详细的错误描述,我可以使用正文(对吗?).到现在为止还挺好.但是,传输专有错误代码的方法是什么,该错误代码在描述错误时更详细(例如"无法连接到数据库"或"数据库登录错误")?如果我把它和信息一起放入体内,我必须在事后解析它.这种东西有标准的标题吗?

4.如何进行身份验证

  • 遵循REST原则的基于API密钥的身份验证是什么样的?
  • 在验证REST客户端时,是否有强烈反对使用会话的优点,除了它是公然违反REST原则?:)(这里只有半开玩笑,基于会话的身份验证可以很好地与我现有的基础设施配合使用.)

rest web-services

593
推荐指数
9
解决办法
13万
查看次数

注销:GET或POST?

这个问题不是关于何时一般使用GET或POST; 它是关于处理Web应用程序注销的推荐方法.我已经在一般意义上找到了关于GET和POST之间差异的大量信息,但我没有找到这个特定场景的明确答案.

作为一个实用主义者,我倾向于使用GET,因为实现它比POST更简单; 只需删除一个简单的链接就可以了.这似乎是我能想到的绝大多数网站的情况,至少从头脑中可以看出来.甚至Stack Overflow也可以使用GET进行注销.

让我犹豫不决的是(尽管很老)一些论点,即一些网络加速器/代理通过访问和检索他们在页面中找到的每个链接来预先缓存页面,因此用户在点击它们时会得到更快的响应.我不确定这是否仍然适用,但如果是这种情况,那么从理论上讲,一旦有用这种加速器的用户在登录后就会被赶出应用程序,因为她的加速器会找到并检索注销链接,即使她从未点击过它.

到目前为止我所阅读的所有内容都建议POST应该用于"破坏性操作",而不改变应用程序内部状态的操作(如查询等)应该用GET处理.基于此,这里真正的问题是:

从应用程序注销被视为破坏性操作/是否会改变应用程序的内部状态?

architecture rest post get

393
推荐指数
6
解决办法
7万
查看次数

RESTful设计/登录或/注册资源?

我正在设计一个Web应用程序,然后停下来考虑如何将我的api设计为RESTful Web服务.目前,我的大部分URI都是通用的,可能适用于各种网络应用:

GET  /logout   // destroys session and redirects to /
GET  /login    // gets the webpage that has the login form
POST /login    // authenticates credentials against database and either redirects home with a new session or redirects back to /login
GET  /register // gets the webpage that has the registration form
POST /register // records the entered information into database as a new /user/xxx
GET  /user/xxx // gets and renders current user data in a profile view
POST …
Run Code Online (Sandbox Code Playgroud)

api rest web-services http restful-url

109
推荐指数
5
解决办法
7万
查看次数

HTTP RESTful Web服务注销:哪个是正确的或更好的做法 - POST还是DELETE?

正如在"RESTful"设置中使用HTTP方法登录和注销操作所接受的答案所述,建议在RESTful Web服务(例如/webservice/login/)中使用HTTP POST(= create)进行登录.POST既不是幂等的也不是安全的(http://restcookbook.com/HTTP%20Methods/idempotency/).

但是如何注销(例如/ webservice/logout /).我应该使用POST还是DELETE?

DELETE是幂等的 - 无论服务器上是否存在会话(或其他),它都会被删除,并且来自网络服务器的答案没有任何进一步的内容.这对我来说有点自然.

POST不是幂等的,类似问题的一些海报建议POST用于REST注销.我可以想到两个可能的原因:

  1. 如果会话不存在,服务器可能会返回404 - 否则成功答案(两种答案)

  2. 注销可以触发例如包含用户等的注销信息的数据库更新,因此注销操作不是幂等的

那么哪种HTTP方法更适合注销 - POST或DELETE?

rest http http-post http-delete

1
推荐指数
1
解决办法
3309
查看次数