模仿 Github,设计一个博客网站的 API

模仿 Github,设计一个博客网站的 API

概述

本次作业需要设计一个博客网站,而首先需要明确博客网站所需的功能。博客网站要管理的主要是用户与博客,所以需要设计的API也围绕这两个来设计。除此之外,还有一些认证功能需要实现。

REST API的介绍
REST全称为Representational State Transfer,是表现层状态转化的意思。REST API 是前后端分离最佳实践,是开发的一套标准或者说是一套规范,不是框架。它的好处有:
1、直接通过http,不需要额外的协议,通常有post/get/put/deletec操作。
2、面向资源,一目了然,具有自解释性。
3、数据描述简单,一般通过json或者xml做数据通讯。

所有 API 访问都是通过 HTTPS 进行的,并且可以通过访问 https://api.blog.com。所有数据都以 JSON 的形式发送和接收。

curl -i https://api.blog.com/users/lsc
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 20 Nov 2019 23:33:14 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Status: 200 OK
ETag: “a00049ba79152d03380c34652f2cb612”
X-GitHub-Media-Type: blog.v3
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4987
X-RateLimit-Reset: 1350085394
Content-Length: 5
Cache-Control: max-age=0, private, must-revalidate
X-Content-Type-Options: nosniff

其中包含的空白字段,null而不是将其省略。
所有时间戳以 ISO 8601 格式返回:YYYY-MM-DDTHH:MM:SSZ

摘要表示

当获取资源列表时,响应包括该资源的属性子集。这是资源的“摘要”表示。
GET /user/blogs

用户认证

POST /users /Regesiter

参数:

名字 类型 描述
username string 用户名
password string 密码
email string 邮箱地址
… … …

响应:

Status: 200 OK
{
   “isRegesiter” : "true"
  "id": 1
  "user_name": " ",
  "created_at": "2019-11-20T00:00:00Z"
}

Login
POST /login
参数:

名字 类型 描述
username string 用户名
password string 密码
… … …

响应:

Status: 200 OK
------------------------------------------------------------------------
{
{
	“isLogin” : "true"
	"username": "Zhangqzh"
	"created_at": "2019-11-20T00:00:00Z"
	"updated_at": "2019-11-20T01:00:00Z"
}

使用无效的凭据进行身份验证将返回401 Unauthorized:

curl -i https://api.exampel.com -u foo:bar 
HTTP / 1.1 401未经授权的
{ 
  “ message”:“错误的凭据”,
  ...
}

在短时间内检测到多个具有无效凭据的请求后,API会临时拒绝该用户的所有身份验证尝试(包括具有有效凭据的请求)403 Forbidden:

curl -i https://api.exampel.com -u valid_username:valid_password 
HTTP / 1.1 403禁止
{ 
  “ message”:“已超过最大登录尝试次数。请稍后再试。”,
  ...
}

Method

Verb Descreption
HEAD 只获取某个资源的头部信息。比如只想了解某个文件的大小,某个资源的修改日期等
GET 获取资源
POST 创建资源
PATCH 更新资源的部分属性。因为 PATCH 比较新,而且规范比较复杂,所以真正实现的比较少,一般都是用 POST 替代
PUT 替换
DELETE 删除资源

例如:

GET /repos/:owner/:repo/issues
GET /repos/:owner/:repo/issues/:number
POST /repos/:owner/:repo/issues
PATCH /repos/:owner/:repo/issues/:number
DELETE /repos/:owner/:repo

状态码

对于客户端来说。状态码都是三位的整数,大概分成了几个区间:

2XX 请求正常处理并返回
3XX 重定向,请求的资源位置发生变化
4XX 客户端发送的请求有错误
5XX 服务器端错误

详细状态码小伙伴可以参考Http Stauses

参考资料

GitHub Developer

发布了5 篇原创文章 · 获赞 0 · 访问量 69
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览