RESTful是一种设计风格,并不是一种标准。
简短的去概括的话,就是:
1、URL 定位资源
资源,就是数据。比如newsfeed,friends,order等
2、用 HTTP 动词描述操作。
GET、PUT、POST、DELETE
我为什么要用TA
1、以前的开发方式都是前后端混在一起开发,比如php里面写html啊之类的。那么移动开发再加上web,我们岂不是要维护三个地方。
2、随着版本迭代,项目越来越大,如果api杂乱无章,那么维护起来更是无法控制。
3、所以,我们就要有所约束,而RESTful就是利用HTTP本身的一些特征来制定的风格。
如何设计RESTful?
-
REST ful 是面向资源的,而资源是通过 URI 进行暴露。
(一)、URI 的设计只要负责把资源通过合理方式暴露出来就可以了
(二)、对资源的操作与它无关,操作是通过 HTTP 动词来体现。
(三)、所以 REST ful 通过 URI 暴露资源时,会强调不要在 URI 中出现动词。
(四)、推荐用复数。
不太理解吗?来看个栗子:
比如:左边是错误的设计,而右边是正确的
GET /rest/api/getDogs | GET /rest/api/dogs 获取所有狗
POST /rest/api/addDogs | POST /rest/api/dogs 添加一个狗
PUT /rest/api/editDogs/:dog_id | PUT /rest/api/dogs/:dog_id 修改一只狗
DELETE /rest/api/deleteDogs/:dog_id | DELETE /rest/api/dogs/:dog_id 删除一只狗
左边的这种设计,很明显不符合REST风格。
上面已经说了,URI 只负责准确无误的暴露资源,而 getDogs/addDogs... 已经包含了对资源的操作,这是不对的。
相反右边却满足了,它的操作是使用标准的HTTP动词来体现。
-
REST ful 很好地利用了HTTP本身就有的一些特征,如HTTP动词、HTTP状态码、HTTP报头等等
(一)、REST ful 是基于 HTTP 的,所以你的API应该去使用 HTTP的一些标准。这样所有的HTTP客户端(如浏览器)才能够直接理解你的API。
(二)、REST ful 强调利用好 HTTP 本来就有的特征。
不太理解吗?一个一个解释:
一、HTTP 动词
GET 获取一个资源
POST 添加一个资源
PUT 修改一个资源
DELETE 删除一个资源
实际上,这四个动词实际上就对应着增删改查四个操作,这就利用了HTTP 动词来表示对资源的操作。
二、HTTP状态码
在与 API 的交互当中,无非就三种状态:
200 OK 成功
400 Bad Request 客户端错误
500 Internal Server Error 服务器端错误
三、HTTP报头
Authorization 认证报头
Cache-Control 缓存报头
Content-Type 消息体类型报头
...
报头还有很多,不一一列举。
HTTP报头是描述HTTP请求或响应的 元数据。
它的作用是客户端 与 服务器端进行相互通信时,告诉对方应该如何处理本次请求。
一些实例如醍醐灌顶
GET http://localhost:8080/api/students 可以获得所有的学生信息。
GET http://localhost:8080/api/students/1 可以获得id为“1”的学生信息。
POST 以下JSON内容
{"id":0,"firstName":"Edison","lastName":"Di","gender":"M",
"birthday":538300800000,"uscId":"1234509876","gpa":3.62,
"mentorId":null,"department":"Computer Science"}
到 http://localhost:8080/api/student 可以添加一个学生信息。
PUT 以下内容
{"gpa":3.62}
到 http://localhost:8080/api/students/1 可以修改学生ID为1的学生的GPA.
DELETE http://localhost:8080/api/students/1 可以删除学生ID为1的信息。