如何在不使用动词的情况下设计RESTful API? 编辑:
这个问题与“浏览器是否可以使用非restful API”或“令牌授权头”无关。这个问题与API设计(查找标签)、良好实践和身份验证(如何在不使用动词的情况下设计RESTful API? 编辑:,rest,api-design,Rest,Api Design,这个问题与“浏览器是否可以使用非restful API”或“令牌授权头”无关。这个问题与API设计(查找标签)、良好实践和身份验证(/login)有关,而与授权(令牌头)无关 我知道如何制作API,HTTP协议如何工作,什么是RPC,什么是REST。如果你读了我的问题,你可能会发现我理解这些原则。请仔细阅读我的问题不要只看标题本身,然后回答。您需要上下文才能回答。 我正在尝试设计一个不使用动词的restapi。这变得越来越具有挑战性,因为我正在处理类似控制器的登录/身份验证等案例 比如,在RE
/login
)有关,而与授权(令牌头)无关
我知道如何制作API,HTTP协议如何工作,什么是RPC,什么是REST。如果你读了我的问题,你可能会发现我理解这些原则。请仔细阅读我的问题不要只看标题本身,然后回答。您需要上下文才能回答。
我正在尝试设计一个不使用动词的restapi。这变得越来越具有挑战性,因为我正在处理类似控制器的登录/身份验证等案例 比如,在RESTful服务中,我应该如何像对待身份验证一样对待自然控制器?我可能在这里太迂腐了,如果我是请纠正我,但是如果我的API包含如下请求
GET /authenticate
那么从定义上来说,它并不被认为是完全宁静的。对吗?我的意思是,这显然是一个动词。因此,它是一个RESTful+RPCAPI
如果我在/authenticate
中违反了我的REST原则,那么为什么我不应该在其他让我的生活更轻松的情况下违反我的REST原则呢?与其他一些业务控制器一样,例如:
GET /users (noun) REST
POST /register (verb) RPC
GET /logout (verb) RPC
这似乎是一个非常语义的问题,如果是这样,我希望你告诉我,我可能认为这是一个愚蠢的方式,所以我可以停止关心这个。但是当我认为API有一个动词时,我觉得很奇怪,所以这就是为什么我要问你的意见。
否则,如果有更好、更RESTful的方式来执行身份验证,我希望得到一些建议。因为在谷歌上找到这个主题的答案很麻烦,除了有人说“不要在RESTful API中使用动词””,这在这种情况下会让人困惑
免责声明:(适用于不谨慎的审阅者/读者)
这可能不是你可能见过的其他问题的重复,比如这个问题
我知道这个特定问题的正确解决方案是什么,因为OP问了一些REST可以很容易完成的问题
我的问题更多的是语义方面的,而不是如何进行基本的REST操作,比如更新用户字段
我发现这两个都不是复制品,但确实非常相似
用户询问哪一个是合适的RESTful设计,但他显然没有得到任何回答。这是“如果您的RESTful设计中有一个/login路径,那么设计是否仍然是RESTful”的语义(愚蠢与否)答案是关于授权,而不是身份验证。
我形成这个免责声明是因为我过去的一些问题被否决了,因为它们被认为是重复的,而实际上它们只是相似的,而且否决票从未被删除,即使我从未得到回复。
不过,如果您找到合适的副本,我真的很乐意接受。只是请不要粗鲁地抛出一个副本,其中唯一重复的是标题。具有本地登录的REST客户端和服务器示例如下: 服务器API:
GET/users/currentUser
返回描述当前用户的JSON文档(显示名称、电子邮件地址、主题首选项、密码过期日期等)- 在
标题中验证用户名和密码,设置上下文。如果无效,抛出401Authorization:basic
- 检索用户信息、序列化、返回
GET/todos/
返回包含所有TODO项的JSON文档- 在
标题中验证用户名和密码,设置上下文。如果无效,抛出401Authorization:basic
- 检索待办事项、序列化、返回
Authorization:basic
标题并将其添加到HTTP客户端GET/users/currentUser
进行测试调用,以验证登录信息并检索用户信息。如果401,登录失败-返回登录UIAuthorization:basic
标题并转换到“authorized”状态,显示应用程序界面GET/todos/
,格式化并显示。如果发生401,则转换为“未经验证”状态(例如,其他客户端更改了密码)您假设的是哪种身份验证?换句话说,为什么您有一个
/authenticate
端点?为什么不在每个资源上使用授权
,并在错误时返回401?如果/authenticate
URL要(例如)接收一个登录令牌以在以后的请求中使用,那么带有授权
头的GET/loginToken
似乎适合“restful”命名。这也符合幂等思维。(如果您认为授权
头与授权有关,这是一种误解。授权
头携带客户端的身份(身份验证)。我将等待回答,但这似乎是链接问题的语义重复。用户是否必须以某种方式登录才能首先获得授权
标题?也就是说,您实际上必须包含一个/login
或/authontate
端点?不,除非您愿意。如果您的服务是通过https的,那么使用HTTP Basic是完全可以接受的。如果不是,那么这通常是将发出令牌的不同(通常是预制)服务的责任。