IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 项目设计-RESTful API设计 -> 正文阅读

[网络协议]项目设计-RESTful API设计

1.背景:

? ? ?只要 HTTP 协议存在,Web 服务就已经存在。但尤其是自云计算出现以来,它们已成为让客户与我们的数据交互的一种非常常见的方式。

我一直在从事涉及构建或使用 API 的项目。

我见过的大多数 API 都声称是“?RESTful?”——即符合 REST 架构的原则和约束。

但是,他们中的一些人一直在给 REST 一个非常非常糟糕的名字。

或者是一些非常糟糕的设计。

还有? 状态代码的错误使用、纯文本响应、不一致的模式……等。

所以我决定写下我认为在设计 REST API 时的一些好的做法

2.?免责声明

? ? ? 我不认为以下说法和做法?100% 符合的 REST 原则,但我觉得该方案无限接近REST 原则。

3.基础知识

? ? ? 如果你要构建一个设计良好的REST API,您最好了解HTTP 协议的基础知识。我

MDN web docs 上的Overview of HTTP是一本很好的文档。

?HTTP REST 的应用

  • HTTP 有动词(或方法):GET、POST、PUT、PATCH 和 DELETE 是最常见的。
  • REST 是面向资源的,资源由URI?:表示/newspapers/
  • 一个端点是一个动词和URI,例如组合GET: /articles/
  • 端点可以解释为对资源的操作。例如,POST: /articles/可能意味着“创建一篇新文章”。
  • 在高层次,动词映射到CRUD操作GET方法ReadPOST手段CreatePUTPATCH均值Update,和DELETE手段......好吧,Delete
  • 响应的状态由其状态码指定:1xx信息、2xx成功、3xx重定向、4xx客户端错误和5xx服务器错误。

4.不友好的 API 与友好的 API 示例 :

HTTP/1.1 200 OK
Content-Type: text/html

{
    "code":0,
    "message":""
    "data": {
        // 请求的数据
    }
}
HTTP/1.1 200 OK
Content-Type: text/html

{
    "code":-1,
    "message","请求失败!"
    "data": {
        // 请求的数据
    }
}

为什么说改设计,不友好。

1. 首先你需要判断code == 0,在去取data内的值。增加不必要的业务逻辑。

2. 正确的请求和错误的请求混淆,主业务逻辑臃肿,且容易出现bug。

?友好的示例

HTTP/1.1 200 OK
Content-Type: application/json

{
  "name":"Chen Yu",
   "age":26,
   "height":172
}
?
HTTP/1.1 500 Internal Server Error
Content-Type: application/json

{
  "status":500,
  "error":"Internal Server Error"
}
?

1.正确请求直接返回结果。

2.错误请求时,返回错误的结果,及错误的详情。

3.正确流程线,和错误流程线分开,有助于写出清晰的代码。

?客户端请求、解析示例:

    axios({
      method:'get',
      url:'http://localhost:3000/',
      responseType:'stream'
    })
      .then((response)=> {
        //正确的响应
      }).catch((e)=>{
        //错误的响应
      });

该设计与github 同款。

https://api.github.com/

5.友好的 API 设计建议?:

1.当程序抛出异常时 ,给出合适的错误码。例如 httpcode 401 用户未授权,403 用已授权,但是权限不足。

2. 当错误发生时,提供比较准确的错误信息,以便于用户通过错误信息,去更改表单,或者能提供错误信息,方便后期快速追踪错误。

3. 客户端在请求时,最好设置最大请求时间,如果api 请求超时,及时给客户提示。这样用户至少能得到一个正确的结果,或者错误的响应。

4.灵活的使用 100-500 的状态码,在业务场景允许时给出最为合适的状态码。

5. 请求分开 GET 请求数据,POST 提交数据,PUT 修改数据,DELETE 修改数据.

6.友好的使用 API 设计能解决哪些问题

1.清晰的代码。

2.友好的客户提示

7.联系我们:?

QQ 群390736068

如果各位,觉得还不过瘾,欢迎加入我们。

最后祝各位兄弟姐妹写成精品程序。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-01-12 00:25:08  更:2022-01-12 00:27:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/5 9:22:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码