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

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

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

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


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


如果楼主或其他同学用过 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 请求,针对的都是集合。

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


这,楼主提问太抽象啦


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


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


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


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

GET /messageCode 获取验证码
POST /messageCode 刷新验证码
DELETE /messageCode 让那个验证码过期
PUT /messageCode 这个好像用不上...因为直接get那步就搞定了
【热门文章】
【热门文章】