个人对restful api的一些理解

最近帮朋友做一个应用的api,采用restful api作为规范。

restful api的一些核心概念

restful api提倡把所有组件都视为资源,因此url中只应该是名词,不应出现动词。用get,post,put,patch,delete等动词对资源进行操作。如对于一个资源user,可以分别用上述动词对其进行增删改查操作。

那么,对于无法明显对应到增删改查范围内的操作如何处理呢?

对于login的处理

通常理解,login是user的操作。所以URI应该是这样的:/users/login。

但是注意restful提倡uri中不应该出现动词,因为uri中的内容都是资源。

那么login是对哪个资源进行操作的呢?又是进行增删改查中的哪个操作呢?

一般登录接口中会返回access_token及用户信息。考虑到login不是新增用户;也不是删;不是改,因为没有改变什么内容;也不是仅仅是查,因为还新增了access_token。那么我们无法将login简单的对应到增删改查中的任意一个操作。

从login所做的具体逻辑出发,login做了两个操作,一是验证用户是否合法,这属于业务逻辑,不做讨论;二是查用户信息,这属于查操作,操作的资源是User;三是增access_token,这又属于新增操作,操作的资源是token。那么login就对应了增删改查中的两个操作,两个资源。所以应该如何处理呢?

个人衡量下认为,应该将login作为增操作进行处理,即采用post方式进行请求。同时在请求中返回User信息。

既然这么处理,那么最合理的url应该是:/user/{userid}/token。但是考虑到实际情况中,/user/login是最易理解并被大家接受的,所以url我建议依然采用/user/login,同时动词依然采用post。