正文   

在了解 REST API URI 设计的规则之前,让我们快速过一下我们将要讨论的一些术语。

URI

REST API 使用统一资源标识符(URI)来寻址资源。在今天的网站上,URI 设计范围从可以清楚地传达API的资源模型,如:

http://api.example.com/louvre/leonardo-da-vinci/mona-lisa

到那些难以让人理解的,比如:

http://api.example.com/68dd0-a9d3-11e0-9f1c-0800200c9a66

Tim Berners-Lee 在他的“Web架构公理”列表中列出了关于 URI 的不透明度的注释:

唯一可以使用标识符的是对对象的引用。当你没有取消引用时,你不应该查看 URI 字符串的内容以获取其他信息。- Tim Berners-Lee

客户端必须遵循 Web 的链接范例,将 URI 视为不透明标识符。

REST API 设计人员应该创建 URI,将 REST API 的资源模型传达给潜在的客户端开发人员。在这篇文章中,我将尝试为 REST API URsI 引入一套设计规则。

在深入了解规则之前,先看一下在 RFC 3986 中定义的通用 URI 语法,如下所示:

URI = scheme "://" authority "/" path ["?" query] ["#" fragment]

规则1:URI中不应包含尾随的斜杠(/)

这是作为 URI 路径中最后一个字符的最重要的规则之一,正斜杠(/)不会增加语义值,并可能导致混淆。REST API 不应该期望有一个尾部的斜杠,并且不应该将它们包含在它们提供给客户端的链接中。

许多 Web 组件和框架将平等对待以下两个 URI:

http://api.canvas.com/shapes/

http://api.canvas.com/shapes

然而,URI 中的每个字符都会被计入作为资源的唯一标识。

两个不同的 URI 映射到两个不同的资源。如果 URI 不同,那么资源也会不同,反之亦然。因此,REST API 必须生成和传达清晰的 URI,并且不应容忍任何客户端尝试去对一个资源进行模糊的标识。

更多的API可能会将客户端重定向到末尾没有斜杠的 URI 上,(他们也可能会返回 301 - 用于重新定位资源的 “Moved Permanently”)。

规则2:正斜杠分隔符(/)必须用于指示层次关系

在 URI 的路径部分的正斜杠(/),用于表示资源之间的层次关系。

例如:

http://api.canvas.com/shapes/polygons/quadrilaterals/squares

规则#3:应使用连字符( - )来提高 URI 的可读性

为了使你的 URI 容易被人检索和解释,请使用连字符( - )来提高长路径段中名称的可读性。在任何你将使用英文的空格或连字号的地方,在URI中都应该使用连字符来替换。

例如:

http://api.example.com/blogs/guy-levin/posts/this-is-my-first-post

规则4:不得在 URI 中使用下划线(_)

文本查看器(如浏览器,编辑器等)经常在 URI 下加下划线,以提供可点击的视觉提示。根据应用程序的字体,下划线(_)字符可能被这个下划线部分地遮蔽或完全隐藏。

为避免这种混淆,请使用连字符( - )而不是下划线

规则5:URI 路径中首选小写字母

方便的话,URI 路径中首选小写字母,因为大写字母有时会导致问题。RFC 3986 中将 URI 定义为区分大小写,但协议头和域名除外。在公众号顶级架构师后台回复“架构整洁”,获取惊喜礼包。

例如:

http://api.example.com/my-folder/my-doc

HTTP://API.EXAMPLE.COM/my-folder/my-doc

在 URI 格式规范(RFC 3986)中这两个 URI 是相同的。

http://api.example.com/My-Folder/my-doc

而这个 URI 与上面的两个却是不同的。

规则 6:文件扩展名不应包含在 URI 中

在 Web 上,字符(.)通常用于分隔 URI 的文件名和扩展名。

一个 REST API 不应在 URI 中包含人造的文件扩展名,来表示消息实体的格式。相反,他们应该通过 header 头中 Content-Type 属性的媒体类型来确定如何处理实体的内容。

http://api.college.com/students/3248234/courses/2005/fall.json

http://api.college.com/students/3248234/courses/2005/fall

不应使用文件扩展名来表示格式偏好。

应鼓励 REST API 客户端使用 HTTP 提供的格式选择机制,即请求 header 中的 Accept 属性。

为了实现简单的链接和调试的便捷,REST API 也可以通过查询参数来支持媒体类型的选择。

规则 7:端点名称是单数还是复数?

这里采用保持简单的原则。虽然你的语法常识会告诉你使用复数来描述资源的单个实例是错误的,但实际的答案是保持 URI 格式一致并且始终使用复数形式。

不必处理奇怪的复数(person/people, goose/geese),这使 API 消费者的生活更美好,也使 API 提供商更容易实现(因为大多数现代框架将在一个通用的 controller 中处理 /students 和 /students/3248234)。

但是你怎么处理关系呢?如果一个关系只能存在于另一个资源中,RESTful 原则可以提供有用的指导。我们来看一下这个例子。某个学生有一些课程。这些课程在逻辑上映射到端点 /students,如下所示:

http://api.college.com/students/3248234/courses - 检索该学生所学习的所有课程清单,学生编号为3248234。

http://api.college.com/students/3248234/courses/physics - 检索该学生的物理课程,学生编号为3248234。

结论

当你设计 REST API 服务时,你必须注意资源,这些资源由 URI 定义。

你正在构建的服务中的每个资源,都将至少有一个 URI 来标识它。这个 URI 最好是有意义的,并能充分描述资源。URI 应遵循可预测的层次结构,以增强可理解性,从而提高可用性:可预测的意义在于它们是一致的,层次结构建立在数据具有结构关系的意义上。

RESTful API 是为消费者编写的。URI 的名称和结构应该向消费者传达意义。通过遵循上述规则,你将创建一个更加清晰的 REST API。这不是一个 REST 规则或约束,而是增强了 API。

来自:blog.restcase.com/7-rules-for-rest-api-uri-design | 责编:乐乐

IT技术分享社区

个人博客网站:https://programmerblog.xyz

文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识


http://www.taodudu.cc/news/show-891372.html

相关文章:

  • 开发工具:IDEA EasyCode插件用法(很实用)
  • 后端技术:这35 个细节,提升你的 Java 代码质量
  • 程序员能力提升:你应该知道的那些编程原则!!
  • GitHub:一份玩转 GitHub 的秘诀,值得收藏!
  • 程序人生:这5个程序员,改变了世界,你都认识吗!
  • 操作系统:Win10系统下LocalNow和Roaming文件夹介绍
  • 工具:分享IntelliJ IDEA 5条调试技巧,太实用了!
  • 网络基础:计算机网络由基础到深入常用知识集锦!
  • 后端:请谨慎使用Arrays.asList、ArrayList的subList
  • SQLServer:用户自定义数据类型用法
  • 数据库知识:SQLServer变量相关知识介绍
  • 存储知识:U盘的实际容量要比标注容量小,你知道原因吗?
  • Java:处理 Exception 的几种实践,很优雅,值得推荐!
  • 操作系统:Linux环境变量相关知识总结
  • 服务器:浅谈 Nginx 性能调优,太实用了!
  • SQLServer常用的配置函数笔记
  • 网络基础:分享几个路由器设置小技巧,总有用得到的一天!
  • 后端:SpringBoot 的@Value注解,高级特性,非常实用!!
  • 盘点全球最厉害的14位程序员,你认识几个?
  • SQLServer常用的字符串函数梳理
  • SQLServer常见的数学函数梳理
  • SQLServer常用的日期和时间函数梳理
  • 给大家推荐一款高逼格的Linux磁盘信息查看工具
  • SQLServer知识:sqlcmd用法笔记
  • 【译】程序员都有的这 10 个坏习惯!
  • SQLServer书写规范梳理
  • 新手实用的电脑维护小常识
  • 36 张图梳理 Intellij IDEA 常用设置,太全了值得收藏!
  • 电脑新手:一次了解电脑键盘上每个键的含义!
  • SQLServer数据库实例相关知识笔记

后端:REST API URI 设计的七准则相关推荐

  1. REST API URI 设计的七准则

    在了解 REST API URI 设计的规则之前,让我们快速过一下我们将要讨论的一些术语. URI REST API 使用统一资源标识符(URI)来寻址资源.在今天的网站上,URI 设计范围从可以清楚 ...

  2. ui设计移动端字体适配_学习UI设计的你要掌握移动端字体七准则

    原标题:学习UI设计的你要掌握移动端字体七准则 字体有许多值得深究的细节,细微的设计汇聚起来,对阅读体验会产生巨大影响. 可能你听过这说法,好的字体是隐形的,不过更准确来说,应该是好的字体让阅读行为毫 ...

  3. PWA系列 - Cache API 的设计与实现

    一 前言 Cache API 是ServiceWorker 的一种新的应用缓存机制,它提供了可编程的缓存操作方式, 能实现各种缓存策略,可以非常细粒度的操控资源缓存. 但我们对Cache API的了解 ...

  4. 从涂鸦到发布 —— 理解API的设计过程

    要想设计出可以正常运行的Web API,对基于web的应用的基本理解是一个良好的基础.但如果你的目标是创建出优秀的API,那么仅凭这一点还远远不够.设计优秀的API是一个艰难的过程,如果它恰巧是你当前 ...

  5. 架构必备「RESTful API」设计技巧经验总结

    转载自   架构必备「RESTful API」设计技巧经验总结 [译者注]本文是作者在自己的工作经验中总结出来的RESTful API设计技巧,虽然部分技巧仍有争议,但总体来说还是有一定的参考价值的. ...

  6. API接口设计之RESTful软件架构风格

    说到API接口设计有的喜欢用Web Service,有的喜欢用WCF,当然也有还在用最原始的ashx,aspx页面的.无论采用什么方式能很好的满足业务需求就ok,但是不同的方式在扩展性.易用性,可维护 ...

  7. api接口设计相关总结

    写过不少接口,不过一直没有去总结,网上搜了一下,大同小异,此文根据以下几个链接整理修改: https://segmentfault.com/a/1190000004051246 http://blog ...

  8. 从涂鸦到发布——理解API的设计过程

    英文原文:From Doodles to Delivery: An API Design Process 要想设计出可以正常运行的Web API,对基于web的应用的基本理解是一个良好的基础.但如果你 ...

  9. Eggjs笔记:RESTful API的设计

    关于RESTful API 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备-). 因此,必须有一种统一的机制,方便不同的前端设备与后端进 ...

最新文章

  1. 惊呆!谷歌AI自动编程效率超研发工程师,作为AI工程师的我感到了森森的压力
  2. 任正非:AI是人类社会未来二三十年最大的推动力
  3. java 复制一个数组_浅谈Java中复制数组的方式
  4. 全球最美的15座数据中心
  5. Innodb隔离级别的实现原理
  6. Linux scp复制文件,不需要输入密码的技巧
  7. linux——客户端服务器文件传输
  8. PP视频如何更改截图保存路径及图片类型
  9. Python使用pyechart绘制3d散点图
  10. mysql内核测试,MySQL 5.7内核复制中的一个小坑
  11. 论win10专业版,企业版和教育版之间自由切换的方法和密钥
  12. 转载:如何使用RFT自动打开IE
  13. 单反相机镜头的ldquo;三大纪律,八项注意rdquo;
  14. spark -- PCA
  15. Protel 99 SE使用心得
  16. 高度优先左高树(HBLT) - C语言
  17. JAVA WEB 开源CMS系统,可用来二次开发
  18. qq登录,手机号验证,邮箱注册
  19. 二进制安装K8S(四):部署flannel网络
  20. [笔记]What is HDBaseT

热门文章

  1. Win7下硬盘安装Ubuntu10.10双系统
  2. 话里话外:猎人讲小事——兔子、凤凰与猎狗
  3. RoHS、无铅制程、无卤 的基本介绍
  4. ABB 机器人 通信指令(人机对话):
  5. 【pyqt5】配置Qt Designer之【designer.exe的保存位置及ui文件转py文件及no Qt platform plugin could be initialized 问题解决】
  6. c语言变量为什么要定义,C语言为什么要规定对所用到的变量要“先定义,后使用”...
  7. 【数字信号处理】 第二章、时域中的离散时间信号
  8. javascript是一门多线程的语言_Javascript:10天设计一门语言
  9. 导致oracle 控制文件坏,异常断电导致ORACLE控制文件等受到破坏的处理
  10. 进程线程区别,和线程初识