以前开发或更新 API 时,我们经常需要深入讨论对 API 的结构、命名和功能等,这个花费了大量的时间。

随着 API 行业的蓬勃发展,API 设计也越来越重要。这么多年发展下来,一些如REST API之类的规则也受到大多数人认可,这些规则可以应用于开发流程中,帮助团队快速达成共识,达到提效的目的。

接下来会介绍 API 设计的原理和规则。而在本文中,我们将专注于 Web API。

先用一句话来解释一下,API 是 Application(应用程序)、Programming(编程)和 Interface(接口)的缩写组合,顾名思义,通过一个编写好的接口,连接两个应用程序,可以内部使用,也可以对外开放。

基本上,每次我们使用 Web 应用程序、发送消息或访问某个 URL 时,都在使用对应的 API ,无论它是客户端应用程序还是服务器应用程序,都是通过 API 来传递数据。

由于 API 和其他一切之间的所有通信都是通过 HTTP 完成的,因此 HTTP 非常重要,需要根据不同的目的和需求,采用不同的请求方法:

  • GET — 请求指定资源的表示。使用 GET 的请求应该只检索数据。

  • POST — 向指定资源提交数据。

  • PUT — 用请求数据替换目标资源的所有当前表示。

  • DELETE — 删除指定的资源。

  • PATCH — 对资源应用部分修改。

具体的用法可以在公众号其他文章中了解,网上也有很多相关的内容,就不过多展开。

开发技术在不断发展,API 架构和协议也越来越多。不同的架构和协议,在制定数据类型、命令方式、功能上都有所不同。以前最流行的是基于 XML 的协议,现在也逐渐被 JSON 取代。

而当今世界上最常见的 API 架构毫无疑问是 REST 。当我们使用 REST API 时,必须遵循 JSON 的规范,以有效的 JSON 格式发出测试请求。好的 API 通常会遵循这些规则:

  • API 必须与后端、数据存储、客户端等分开。考虑到安全性和灵活性,API 必须是单独的层级;

  • 不同的请求应该互不干扰,独立处理。这也意味着每个请求都需要包含处理它所需的所有信息;

  • API 应该独立于客户端外发送请求,以相同的方式工作。例如在 Web 服务器、负载平衡器还是任何其他客户端;

  • 资源应该在客户端或服务器端应该是可缓存的。这可以提高客户端的性能,同时提高服务器端的可拓展性;

  • 处理错误并返回相应的错误代码。帮助用户了解是404还是其他问题;

  • API 必须是有容错的。用户有时因为物理原因如网络超时等,发出了重复的请求,这样的请求应该返回相同的结果;

  • 使用 Eolink 或其他工具生成规范的 API 文档。不管是使用还是工作交接,都需要用到 API 文档。

命名端点也有一些很好的方式:

  • 只使用名词:端点应该用指定资源内容的名词命名,而不是为正在执行的功能添加动词。例如命名端点 /users 并使用不同的 HTTP 方法来处理用户实体,而不是创建多个 /get-user 、/add-user 等端点;

  • 使用清晰的名称:端点的名称应该清晰直观。不要使用任何快捷方式或缩写,除非很明显 - /ids 是可以理解的并且比 /identification-numbers 更可取;

  • 通过正斜杠构建层次结构:将端点分组为逻辑组。如 /departments/ids 和 /departments/managers ,比 /departments-ids 和 /departments-managers 更好;

  • 仅使用小写:URL 是区分大小写的,因此最好尽量避免使用大写;

  • 使用“-”分隔单词:端点名称中的不同单词通常用“-”分隔,而不是下划线或骆驼拼写法;

  • 避免使用特殊字符:URL 只能使用 ASCII 字符集发送和接收,因此可以只使用该字符集中的字符。同时其他如“%”,“[]”,“{} ”,“|”,“,”“<>” 最好也尽量避免使用。

大多数 REST API 是与微服务架构一起制作的。

在这种情况下,这种 API 结构将提供更改底层逻辑、添加或删除组件等的灵活性,而无需更改与其他服务的其他通信协议。

相信你也对 Web API 的设计有了一定的了解了,这是无数人验证过的合理的优秀的方案,尝试一下应用到工作中吧!

图中所使用的的接口管理工具是eolink,感兴趣可以自行使用:www.eolink.com

最新文章

  1. 很不错的Intent用法 适用于正在开发的伙伴。自己看到了,也分享给大家吧。
  2. 适合PHP学习者的学习路线 10个PHP优化技巧
  3. 探索javascript----拖拽
  4. 对于MVC中应用百度富文本编辑器问题的解决办法
  5. AlwaysOn可用性组功能测试(二)--SQL Server群集故障转移对AlwaysOn可用性组的影响
  6. 邮件格式(HTML/TXT),TXT为文本邮件
  7. poj3159 差分约束 spfa
  8. [转载]关于android SDK安装Failed to fetch URL http://dl-ssl.google.com/android/repository/addons_list-1.xml出错
  9. mysql数据库用户和权限管理记录
  10. 【转载】free查看内存
  11. [Javascript] Creating an Immutable Object Graph with Immutable.js Map()
  12. Struts2 中拦截器和Action的调用关系(写的很好)
  13. centos 7 安装 mariadb数据库
  14. phpstudy连接SQL Server 2008数据库 以及 php使用sql server出现乱码解决方式
  15. 关于CSS 的position定位问题
  16. 802.1X和NAP整合实验手册
  17. 51 nod 1610 路径计数(Moblus+dp)
  18. Bresenham算法
  19. 二十四、Linux 进程与信号---wait 函数
  20. Android笔记(五):广播接收者(Broadcast Receiver)

热门文章

  1. 3D打印CLI文件格式的读取
  2. 高级IPC DBus
  3. 小程序扫码、上传图片、css时间轴
  4. 【软件构造】Mutable类型与Immutable类型
  5. 2022年5月11日,NBMiner发布了41.3版本,在内核中加入了100%LHR解锁器,从此NVIDIA的显卡再无锁卡一说
  6. 使用BGP-blackhole解决IDC频繁遭受DDOS攻击困扰
  7. c# SendInput模拟输入字符和按键
  8. MongoDB 各项命名规范
  9. 牛客多校赛2K Keyboard Free
  10. STC8H开发(十一): GPIO单线驱动多个DS18B20数字温度计