API端点/资源命名最佳实践

简介: 有很多理由来驱动深思熟虑地命名 API 端点,为 API 端点选择合理的名称可以极大地平滑新开发人员的学习曲线,帮助他们直观地知道要寻找什么以及在哪里找到它,也能极大的降低开发人员之间的沟通成本。本文将介绍API端点命名的实用规范,关于REST的设计准则,可以参阅《9个REST API设计的基本准则》,在开始讨论API命名实践之前,先聊下 REST 的资源命名准则。

有很多理由来驱动深思熟虑地命名 API 端点,为 API 端点选择合理的名称可以极大地平滑新开发人员的学习曲线,帮助他们直观地知道要寻找什么以及在哪里找到它,也能极大的降低开发人员之间的沟通成本。本文将介绍API端点命名的实用规范,关于REST的设计准则,可以参阅《9个REST API设计的基本准则》,在开始讨论API命名实践之前,先聊下 REST 的资源命名准则。

RESTful 资源命名准则

先来看看特定于 REST 的命名准则,其中一些命名实践同样适合其他风格的API,但常见于 RESTful API “端点”的命名中。

根据  Roy T. Fielding 本人的说法,没有“REST 端点”这样的东西。有资源,一组仅受 URL 长度限制限制的资源,通常资源被当做端点的子集来用。

名词 URI 作为资源

REST 易懂的特征之一是在 URI 中主要使用名词。RESTful URI 不应该使用任何类型的CRUD(创建、读取、更新、删除)功能,URI 应该用于唯一标识资源,而不是对它们进行任何操作。因此,REST API 应该允许通过一个HTTP方法操作资源,资源应该采用名词的形式。

示例: /users/{id} 代替 /getUser

“RESTful URI 应该引用一个事物(名词)的资源,而不是引用一个动作(动词),因为名词具有动词没有的属性——就像资源具有属性一样。” —— RESTfulAPI.net

多元化的资源

接下来是资源名称是否应该是复数的问题,显然,这是一个偏好问题,但是,经验丰富的 API 设计者会建议将所有资源多元化,除非它们是单一资源。

例如:/users (典型资源) 或 /users/{id}/address (单例资源)

使用斜杠 / 表示层次关系

如上面的例子所示,斜杠/ 通常用于显示单个资源和集合之间的层次结构。

例如::/users/{id}/address 显然属于 /users/{id} 的资源,该资源属于 /users 集合。

“层次结构:没有任何强制规定,只需确保强加的结构对开发有意义。与软件开发工艺中的所有事情一样,命名是成功的关键。” —— RESTAPITutorial.com

标点符号的列表

当没有层次关系时(如在列表中),应该使用分号之类的标点符号或者常见的逗号。

例如:/users/{id1},{id2} 访问多个用户资源。

必要时查询参数

为了对集合进行排序或过滤,REST API 允许在 URI 中传递查询参数。 例如:/users?location=shenzhen 查找位于 shenzhen 的所有用户

使用连字符 - 提高可读性

为了使 URI 容易被开发人员理解,建议使用连字符-字符来提高长较长名称的可读性。

例如:/users/{id}/pending-orders 替代 /users/{id}/pendingorders

不要使用下划线_

虽然可以用下划线 _ 代替连字符 - 作为分隔符,但有些应用程序的字体,下划线 _ 字符可能会在某些浏览器或屏幕中部分被遮住或完全遮住。

为避免这种混淆,建议使用连字符 - 而不是下划线 _

例如:/users/{id}/pending-orders 替代 /users/{id}/pending_orders

使用小写字母

RFC 3986 将 URI 定义为区分大小写,对于不同环境,大小写URI代表不同的路径,为了避免混淆,建议在 URI 中应始终使用小写字母。

端点资源命名

上面介绍了常见的REST API 资源命名规范,然而,无论 API 是否是 RESTful风格,都应该坚持一些通用的命名规范。

直观的名称(不用术语)

让端点名字更直观!在可能的情况下,选择最简单和最常用的词来代替给定的概念。如果操作正确,大多数端点/资源名应该是可以猜到其用途的,这样开发人员就不必去查看API文档了。

作为这一点的延伸,避免使用术语。知识渊博的开发人员对术语可能没有什么障碍,但大多数开发人员对于行业术语不一定都听过。

不省略(不用缩写)

避免省略端点/资源名,现代WEB技术、网络环境和设备,没这个必要节省了。事实上,缩写的名称实际上会在API中造成混淆,开发人员很难猜测(有时甚至理解)所选择的名称。

例如: /users/{id}/phone-number 代替 /users/{id}/tel-no

不用扩展名

不要在 URI 中使用文件扩展名(例如.xlsx),相对来说很难看,而且给增加了 URI 长度。如果需要指定内容的格式,建议使用Content-Type

例如: /users/{id}/pending-orders 代替 /users/{id}/pending-orders.xlsxContent-Type:application/vnd.ms-excel;charset=utf-8;

不用斜杆 /  结尾

同样,为了保持  URI 的整洁,不要在  URI 的末尾添加一个斜杠 / ,会增加语义值并可能导致混淆,最好完全放弃。

例如: /users/{id}/pending-orders 代替 /users/{id}/pending-orders/

末尾的斜杠必须没有特定的语义,资源路径必须提供相同的结果,不管它们是否有末尾的斜杠。 —— Zalando RESTful API and Event Guidelines

一致性是关键

端点命名的一致性原则是必须要遵守的,就算严格遵照上述约定,如果名称不一致,API 总是会感到特别别扭。在API中总是使用相同的名称来引用给定的资源。

本文所述的端点命名规范,有其片面性,实际开发中会有更加友好的规范,但不管何种规范何种风格,都需要确保端点名称与文档中使用的名称以及应用程序本身(如果适用)使用的名称保持一致。

例如: /users 应该记录在 users 资源下,而不是 getUser 方法下。

总结

以上总结了一些项目用得上的API端点/资源的命名规范,像简洁直观的命名规范肯定对开发人员很友好!对于更细粒度的API设计规范,推荐阅读Zalando RESTful API and Event Guidelines


相关文章
|
1月前
|
安全 API 持续交付
要利用阿里云控制API查询您的阿里云资源
【2月更文挑战第33天】要利用阿里云控制API查询您的阿里云资源
20 3
|
3月前
|
存储 数据库连接 API
具有嵌套关系的可重用API资源——Laravel5.5
本文聚焦于利用 Laravel 中的 Resource::collection,并强调控制器对于处理数据关系包含的重要性。
37 1
|
1月前
|
缓存 前端开发 API
构建高效可扩展的RESTful API:后端开发的最佳实践
【2月更文挑战第30天】 在现代Web应用和服务端架构中,RESTful API已成为连接前端与后端、实现服务间通信的重要接口。本文将探讨构建一个高效且可扩展的RESTful API的关键步骤和最佳实践,包括设计原则、性能优化、安全性考虑以及错误处理机制。通过这些实践,开发者可以确保API的健壮性、易用性和未来的可维护性。
|
1月前
|
API 开发者 UED
深入探讨RESTful API设计原则及最佳实践
在当今互联网时代,RESTful API已成为各种软件系统之间进行通信的重要方式。本文将从资源定义、URI设计、HTTP方法选择、状态码规范等方面深入探讨RESTful API设计的原则与最佳实践,帮助开发者更好地构建高效、健壮的API。
|
消息中间件 监控 安全
探究如何在Linux系统中修改进程资源限制:四种方法调整进程限制,让你的系统高效运行(包含应用层getrlimit和setrlimit API)
探究如何在Linux系统中修改进程资源限制:四种方法调整进程限制,让你的系统高效运行(包含应用层getrlimit和setrlimit API)
45 0
|
2月前
|
存储 Oracle Java
Java 包和 API 深度解析:组织代码,避免命名冲突
Java 中的包 用于将相关的类分组在一起。可以将其视为文件目录中的一个文件夹。我们使用包来避免名称冲突,并编写更易于维护的代码。 包分为两类: 内置包(来自 Java API 的包) 用户定义的包(创建自己的包)
309 2
|
2月前
|
数据建模 API 定位技术
详解 API 设计最佳实践
应用程序接口(API)是一种接口,它让应用程序可以轻松地使用另一个应用程序的数据和资源,API 对于一个产品或公司的成功至关重要。 如果没有 API,你大部分喜欢的软件今天就不会存在。例如,Google Maps API 可以让你在 app 或 Web 应用中使用 Google Maps。如果没有它,你将不得不设计和开发自己的地图数据库。这样的话,在地图上显示一个位置需要花费多少时间?
|
3月前
|
安全 API 数据安全/隐私保护
API安全性最佳实践
API安全性最佳实践
|
3月前
|
安全 测试技术 API
API测试清单和最佳实践
API测试清单和最佳实践
API测试清单和最佳实践
|
3月前
|
JSON API 数据格式
RESTful API 最佳实践
RESTful API 最佳实践
118 0