相关疑难解决方法(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万
查看次数

在URL中使用动词从根本上与REST不兼容吗?

因此,假设我们有一些似乎不能最好地表示为资源的东西(我们想要暂停的进程状态,我们想要在服务器上执行的无状态计算等).

如果在API设计中我们使用process/123/pause或者calculations/fibonacci- 从根本上与REST不兼容吗?只要这些URL可以使用HATEOAS发现并且媒体类型是标准化的,那么到目前为止,我似乎没有看到它.

或者我是否应该在此处回答的消息中添加操作?

注1:
我确实理解可以用名词来改写我的一些例子.但是我觉得,对于特定情况,名词不像动词那样有效.所以我试图理解是否有这些动词会立即取消.如果是,那么为什么推荐是如此严格,以及在这些情况下不遵循它可能会让我感到遗憾.

注2:
答案"REST对此没有任何限制"将是一个有效的答案(这意味着这种方法是RESTful).答案"这取决于你问谁""这是一种最佳做法"并没有真正回答这个问题.这个问题假定REST的概念存在于一个明确定义的常用术语中,两个人可以使用它来引用同一组约束.如果假设本身不正确并且REST的正式讨论毫无意义,请说出来.

rest

51
推荐指数
3
解决办法
2万
查看次数

标签 统计

rest ×2

web-services ×1