模仿 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

VerbDescreption
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值