设计 RESTful 风格的 api, 获取短信验证码的接口应该放在哪个资源下比较好

发布于 2022-09-01 17:19:20 字数 363 浏览 15 评论 0

rt, 除了获取短信验证码的接口, 还会有一些操作, 比如搜索接口, 都只是一个动作, 这些大家在设计RESTful风格的api时, 是如何设计的呢?

为了更详细的描述这个问题, 我举几个例子, 我指的是放在哪个资源下, 而不是动作
例如
post /users 代表注册
get /users 代表获取用户信息
post /sessions 代表登录
delete /sessions 代表退出
这里 sessions, users 就是资源

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

生生漫 2022-09-08 17:19:20

如果楼主或其他同学用过 Rails 的话,理解 RESTFul 就会非常容易。下面我拿 blogs 举例,验证码的话,类似。

rails g scaffold blogs

默认路由

resources :blogs

为了便于理解,我加上 member, collection ... 尽管内容是空的。

resources :blogs do
  member do
    # ...
  end

  collection do
    # ...
  end

  # ...
end

它生成的 url helper, 对应 URL, 对应 Controller#Action,你能理解下面的话,一切就很简单了。

   Prefix Verb   URI Pattern     Controller#Action  意义
    blogs GET    /blogs          blogs#index        文章列表页面
          POST   /blogs          blogs#create       创建文章

 new_blog GET    /blogs/new      blogs#new          创建文章页面
edit_blog GET    /blogs/:id/edit blogs#edit         编辑文章页面

     blog GET    /blogs/:id      blogs#show         展示文章页面
          PATCH  /blogs/:id      blogs#update       更新文章
          PUT    /blogs/:id      blogs#update       更新文章
          DELETE /blogs/:id      blogs#destroy      删除文章

说明:PATCH 和 PUT 一般不区分。

搜索,没有创建、没有更新、没有删除(从数据库“增删查改”角度看的话,它属于“查”),所以肯定是 GET 方法。
操作的是一个集合,还是单个对象呢?这里对的是多个对象,所以是 collection

resources :blogs do
  member do
    # ...
  end

  collection do
    # ...
    get :search # <- 这一行
  end

  # ...
end
search_blogs GET    /blogs/search   blogs#search  搜索文章

search 按照 RESTFul 来看,其实和 index 是一样的,都是 GET 请求,针对的都是集合。

其它的操作,需要楼主联想,在此就不展开了。

南…巷孤猫 2022-09-08 17:19:20

按照restful的规范(名字只能是一个名词/资源,不能出现动词),可以如下:

GET /messageCode 获取验证码
POST /messageCode 刷新验证码
DELETE /messageCode 让那个验证码过期
PUT /messageCode 这个好像用不上...因为直接get那步就搞定了
末骤雨初歇 2022-09-08 17:19:20

搞不懂为什么采纳楼上的答案,这明显是回避了问题,只是把restful最适合的增删改查拿了出来。而对于本题的,短信验证码的api,却避而不谈。

说说我的理解吧:这个接口不应该用restful设计。
很简单,短信验证码的名词大家都是懂的:sms/sms-code/verify-code等等。但是,4个HTTP动词根本就没办法表达发送。
很简单,这4个动词只考虑了最一般的情况,要么就像楼上那样,强制说:我的get就是表达发送的意思。但其实这样是不对的,因为get在restful是从api获取信息的意思,同时也是幂等的,而这里api不是返回信息,而是发送验证码到用户手机,同时,也不是幂等的,这次调了,下次再调,是不一样的。
现在我的实现是这样:简单的在sms-code后加上一个动词,send,也就是sms-code/send,然后HTTP动词用post。

如果是想实现短信验证码登录,试试一些集成的账号系统吧,http://www.onlyid.net 之类的,没这些麻烦事。

看海 2022-09-08 17:19:20

用messageCode来定义资源,然后资源表述定义为get||search,按照你的提问我是这么理解的.

恬淡成诗 2022-09-08 17:19:20

哈。我们项目是直接用/api/sms的。当时也没注意这么多,用得是POST,主要是考虑到每次POST 会增加服务器上的某些资源

星軌x 2022-09-08 17:19:20

我司这么理解的,如果执行资源操作的人是请求者,那就用名词做uri,如果执行资源操作的是服务器或者其他就创建一个服务请求,我记得有一个比较好的例子是转账业务,用transaction做uri。所以短信验证码我觉得用一个创建一个短信通知比较合理。比如sms-notify

倾城月光淡如水﹏ 2022-09-08 17:19:20

遇见搜索咋处理呢?

慈悲佛祖 2022-09-08 17:19:20

这,楼主提问太抽象啦

影子是时光的心 2022-09-08 17:19:20

这里可以追加问题么?
如果楼主知道麻烦回答下。。
比如说get users,这个借口,如果我想根据用户的状态加其他查询比如用where这跟get users算一个接口,还是两个?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文