近期读了一本微电子书 Brian Mulloy 所著《Web API Design》感觉颇多收获,特对其内容做了个整理摘要以便回想其观点精华以指导日常工作中的设计思路。

本文主要讲述 Web API 设计,追求一种更务实的 REST 风格。 正如作者所说 REST 是一种架构风格,而非严格的标准,不是必需在形式定义上去做过多真论,究竟什么才是真正的 REST? 设计的目的是为了表达某样东西是怎样使用的,那么 API 设计的成功与否是由开发者是否可以高速上手并用的愉快。

以下讲述了 Web API 设计的 13 个要点。

本条是关于 URL 设计的,使用名词而非动词,让 URL 保持简单和符合直觉。
这条是针对资源型 URL 设计而言,为什么?请看下一条。

用名词表达来领域概念,能够极大的降低 URL(API)的需求量。
使用 HTTP 协议方法动作来操作领域概念集。
通过分离概念和行为极大简化了 API 设计,让 URL 中仅仅体现概念而非行为。

/elements/elementId 的二级 URL 形式,第一级表达元素集合,第二级表达集合中某个详细元素 id,因此使用名词复数是作者推荐的更符合认知直觉的方法。 同一时候对于元素集合使用更详细的领域名词含义更清晰,若使用抽象的概念名词则表达不清。

为了表达对象间的关联性,有一种方法是体如今 URL 的层级中,但 URL 层级过深并不便于记忆和认知。 这里推荐用 HTTP '?' 后可选參数来表达关联条件,简化 URL 复杂性。

假设可能使用 HTTP 的错误码来映射 API 错误。 HTTP 本身已经定义了广为认知的错误码区间,按类型将错误映射到相应区间对开发者的学习和认知更友好。 提供尽可能详尽的错误信息。

绝不公布一个不带版本的 API。关于这点做过软件维护的都明确,有一点细节就是版本号号的选择,请使用 v1, v2 整数版本号号而非 v1.1 v1.2 这样的带小数点版本号号机制。这里有个心理认知原因,带小数点的版本号通常给人的感觉会频繁变化,而对于一个开放的 API 而言频繁变更绝对是应该避免的,因此不要使用带小数点版本号号机制。

当我请求某个对象时不须要其所有属性或须要分页时怎么办?上图中样例已经非常好的回答了。

该条针对非资源型 URL 设计而言,由于有些情况就是请求做一个计算,如上图中所看到的请求金额按币种进行转换。 对于此类 API,使用动词就是合适的,但最好在你的 API 文档中将此类 API 独立分类说明。

开发者对文件系统的后缀名命名方式都非常熟悉了,因此使用后缀名表达响应格式是自然的。 那么默认格式应该选择什么呢?毫无疑问是 JSON,这一点与 javascript 是 Web 端的通用语言有关。

如上,既然我们要照应 javascript 语言,那么属性命名自然也要採用 javascript 语言传统的驼峰命名法。

简单的搜索能够用资源型 API 来模式化,但全局的搜索 Google 模式大家都非常熟悉。

为 API 申请独立的子域名,有且仅有一个是最好的,并且最好是这个域名模式 api.youdomain.com


有了 API 还不够,辅助以 SDK 工具包能够进一步减轻 API 使用者的负担,最重要的是还能避免 API 的误用和低效使用。 事实上这里另一个优点:

Eating your own dog food

Web API 设计摘要相关推荐

  1. 我所理解的RESTful Web API [设计篇]

    <我所理解的RESTful Web API [Web标准篇]>Web服务已经成为了异质系统之间的互联与集成的主要手段,在过去一段不短的时间里,Web服务几乎清一水地采用SOAP来构建.构建 ...

  2. VBS 请求WebAPI接口_如何设计WEB API

    前言 我一直认为WEB API设计是后端工程师的活,对WEB API设计规范理解的不是很深,正是因为之前看过不同后端工程师的Web API设计难以对接前端产品,导致经常需要修改接口,浪费了很多时间,专 ...

  3. web api开启错误提示_当HTTP状态代码不足时:处理Web API错误报告

    web api开启错误提示 RESTful Web API设计的一个领域(经常被忽视)是如何报告与业务或应用程序有关的错误和问题. 首先要想到HTTP状态代码的正确用法,尽管非常方便,但通常它的信息量 ...

  4. 当HTTP状态代码不足时:处理Web API错误报告

    RESTful Web API设计的一个领域(经常被忽视)是如何报告与业务或应用程序有关的错误和问题. 首先要想到HTTP状态代码的正确用法,尽管它非常方便,但通常它的信息量还不够. 让我们以400错 ...

  5. ASP.NET Web Api 教程

    使用ASP.NET Web Api构建基于REST风格的服务实战系列教程[七]--实现资源的分页 摘要: 系列导航地址http://www.cnblogs.com/fzrain/p/3490137.h ...

  6. ASP.net Web API综合示例

    目录 概述 功能介绍 程序结构 服务器端介绍 客户端介绍 "契约" Web API设计规则 并行写入冲突与时间戳 身份验证详解 Web API验证规则 客户端MVVM简介 Web. ...

  7. 架构师2月刊发布:解读Android、高效运维、API设计方法论

    卷首语(InfoQ总编辑 崔康) \\ 又到年根,作为一位技术媒体人开始频繁拜访各家公司,总结过去,面向未来,在这里把发现的一些新趋势和自己的感受梳理一下,就不透露公司名称了,供大家参考. \\ 公有 ...

  8. soap协议_当SOAP遇上REST!一文解读Web服务Web API方法

    当SOAP遇上REST!一文解读eb服务和Web API方法 SOAP和REST,也许您已经很熟悉它们,希望扩展您的知识或获取新的观点.或者,也许您听说过它们,并正在寻求更好的理解.毕竟,SOAP和R ...

  9. 生成用于ASP.NET Web API的C#客户端API

    目录 介绍 主要特征 主要好处 背景 推定(Presumptions) 使用代码 步骤0:将NuGet软件包WebApiClientGen安装到Web MVC/API项目 步骤1:建立.NET Cli ...

最新文章

  1. 力扣(LeetCode)刷题,简单+中等题(第31期)
  2. druid抛出的异常------javax.management.InstanceAlreadyExistsException引发的一系列探索
  3. CUDA 编程上手指南:CUDA C 编程及 GPU 基本知识
  4. nod32可以限制软件安装么_玻璃钢法兰安装时可以别劲么 玻璃钢法兰安装视频
  5. java实现表达式求值_如何编写一个高效的Java表达式求值程序
  6. 非递归分治法排序 MergeSort without recursion
  7. 部分IE8使用的兼容CSS3属性的方法
  8. CentOS7通过yum安装Openresty
  9. saltstack学习笔记
  10. 防病毒网关、防火墙与防病毒软件功能及部署对比
  11. 页面中设置IE浏览器的文档模式
  12. 《Cocos Creator游戏实战》实现微信小游戏的截图,预览和相册保存功能
  13. Encoder-Decoder 模型架构详解
  14. c语言 按键切换显示屏,51单片机lcd1602按键切屏
  15. 5g消息 服务器出错,中国移动 5G 消息被下架 官方回复技术问题
  16. 网上值机软件测试,值机员考试(B)题
  17. 传统防火墙与Web应用程序防火墙(WAF)的区别
  18. apache atlas 官方安装
  19. 【C语言】案例四十六 点名册(一)
  20. java中slacc意思,家用联通光纤开启IPv6

热门文章

  1. 中国5G研发试验喜迎“小学课本”
  2. Android中样式及主题
  3. Fragment过度动画分析一
  4. 从一个表复制到另一个表SQL
  5. 中国内地楼市泡沫严重 租售比1000倍超美国
  6. linux IP 设置
  7. Redis ZSet 的几种使用场景
  8. Spark 系列(一)—— Spark 简介
  9. Go进阶:如何开发多彩动感的终端UI应用
  10. Spring 基础技术点