这次的作业是:设计一个专用于REST API高性能路由库
REST API
rest api 是前后端分离开发的一套标准或者说是一套规范。在rest中,每一个URL代表一种资源,客户端和服务器之间,传递这种资源的某种表现层,客户端通过四个HTTP动词,对服务器端资源进行操作,实现“表现层状态转化”。在学习rest api的时候,我们需要知道:
rest api 的基本操作有四种:
操作 | 意义 |
---|---|
GET | 用来获取资源 |
POST | 用来新建和更新资源 |
PUT | 用来更新资源 |
DELETE | 用来删除资源 |
当然,rest api 的操作不止这四种,但是对于一个简单的设计而言,这四种操作是最基础的
HTTP状态代码可让你快速了解响应的状态,范围从100+到500+,通常,数字遵循以下规则:
状态代码 | 意义 |
---|---|
200+ | 请求已成功 |
300+ | 请求被重定向到另一个URL |
400+ | 从客户端发起的错误已经发生 |
500+ | 从服务器发起的错误已经发生 |
比如我们常见的404 NOT FOUND,就是说明服务端没有问题,收到了客户端的请求,但是客户端所请求的资源不存在或者链接失效,服务端就会返回一个404错误,大概是这样:
HTTP/1.1 404 Not found
{
"message": "It looks like you're lost.",
"documentation_url": "https://api.blog.com"
}
登陆博客
用户登陆博客,需要提交两样东西——账号名和密码:username和password
curl -u username -p password https://api.bolg.com
用户登陆成功后,才可以进行阅读博客、发表博客等操作
登陆成功后,返回的HTTP状态代码应该是200,表示请求成功。反之,失败也应该返回404,并告知用户错误是“用户名或密码不存在”
阅读博客
阅读博客应该采用GET操作,分为两步,一步是获取某用户的所有博客信息,另一种是获取某一篇博客
获取某用户所有博客的标题(ID)
GET /username/articles
请求命令:curl -i https://api.blog.com/username/articles
根据标题(ID)获得具体某一篇的博客
GET /username/articles/ID
请求命令:curl -i https://api.blog.com/username/articles/ID
响应结果为博客的内容状态
{
"public":true,
"title":"hello",
"username":"luisao"
"visited": 100,
"started":10,
"href":"https://api.blog.com/username/articles/ID",
"writed_at": "2019-01-01 00:00:00",
"updated_at": "2019-011-01 00:00:00",
"action":"GET",
"tag":"...",
"content":"……"
}
发表博客
POST /username/articles/博客名
请求命令:curl -u -i -d ‘{“title”:“hello”,“public”:true,“tag”:"…",“content”:"……"}’ https://api.blog.com/articles/test
可以看出,发表博客的参数有title、public、tag、content等
响应结果为博客的发表状态
{
"isWrited":true,
"public":true,
"title":"hello",
"username":"luisao"
"visited": 100,
"started":10,
"href":"https://api.blog.com/username/articles/ID",
"writed_at": "2019-01-01 00:00:00",
"action":"POST",
"tag":"...",
"content":"……"
}
更新博客
PUT /username/articles/博客名
请求命令:curl -u -i -d ‘{“title”:“hello”,“public”:false,“tag”:"…",“content”:"……"}’ https://api.blog.com/articles/test/update
更新博客和发表博客的内容差不多
响应结果为博客的更新状态
{
"isUpdated":true,
"public":true,
"title":"hello",
"username":"luisao"
"visited": 100,
"started":10,
"href":"https://api.blog.com/username/articles/ID",
"updated_at": "2019-011-01 00:00:00",
"action":"PUT",
"tag":"...",
"content":"……"
}
删除博客
删除博客需要提供博客名或者博客ID:
DELETE /username/articles/博客名
请求命令:curl -i -u https://api.blog.com/luisao/delete/title = “hello”
响应结果为博客的删除状态
{
"isDeleted":true,
"title":"hello",
}
其他功能:比如发表评论、收藏文章等,都是类似的