内容简介:资源的定义:在 REST 中,主要数据表示为资源;REST 中信息的关键抽象是一种资源; 可以命名的任何信息都可以是资源:文档或图像,临时服务(例如“洛杉矶的今天天气”),其他资源的集合,非虚拟对象(例如人)等等。 换句话说,任何可能是作者超文本引用目标的概念都必须符合资源的定义。 资源是对一组实体的概念映射,而不是与任何特定时间点的映射相对应的实体。资源可以是单例或集合。
资源的定义:
在 REST 中,主要数据表示为资源;REST 中信息的关键抽象是一种资源; 可以命名的任何信息都可以是资源:文档或图像,临时服务(例如“洛杉矶的今天天气”),其他资源的集合,非虚拟对象(例如人)等等。 换句话说,任何可能是作者超文本引用目标的概念都必须符合资源的定义。 资源是对一组实体的概念映射,而不是与任何特定时间点的映射相对应的实体。
资源可以是单例或集合。
例如,“customers”是一个集合资源,“customer”是一个单例资源(在银行领域)。 我们可以使用URI“/ customers”来识别“customers”集合资源。 我们可以使用URI“/ customers / {customerId}”识别单个“客户”资源。
资源也可以包含子集合资源。
例如,可以使用URN“/ customers / {customerId} / accounts”(在银行业务域中)来识别特定“客户”的子收集资源“账户”。
类似地,子集合资源“帐户”内的单个资源“帐户”可以标识如下:“/ customers / {customerId} / accounts / {accountId}”。
REST API使用统一资源标识符(URI)来定位资源。
REST API设计者应该创建URI,将REST API的资源模型传达给潜在的客户端开发人员。 当资源命名良好时,API直观且易于使用。 如果做得不好,那么相同的API会感觉难以使用和理解。
统一接口的约束部分通过URI和HTTP动词的组合来解决,并且根据标准和约定使用它们。
以下是为新API创建资源URI时可以使用的一些提示。
使用名词表示资源
RESTful URI应该引用作为事物(名词)的资源而不是引用动作(动词),因为名词具有动词不具有的属性 - 类似于具有属性的资源。 资源的一些示例是:
系统的用户
用户帐户
网络设备等
他们的资源URI可以设计如下:
http://api.example.com/device-management/managed-devices
http://api.example.com/device-management/managed-devices/{device-id}
http://api.example.com/user-management/users/
http://api.example.com/user-management/users/{id}
复制代码
为了更清楚,让我们将资源原型划分为四个类别(文档,集合,存储和控制器),然后您应始终将资源放入一个原型,然后始终如一地使用它的命名约定。 为了资源的一致性,请抵制去设计资源的诱惑,这些资源将是不止一个原型的混合体。
文档
文档资源是一种类似于对象实例或数据库记录的单一概念。 在REST中,您可以将其视为资源集合中的单个资源。 文档的状态表示通常包括具有值的字段和指向其他相关资源的链接。
使用“单数”名称表示文档资源原型:
http://api.example.com/device-management/managed-devices/{device-id}
http://api.example.com/user-management/users/{id}
http://api.example.com/user-management/users/admin
复制代码
集合
集合资源是服务器管理的资源目录。 客户可以建议将新资源添加到集合中。 但是,要由集合选择是否创建新资源。 集合资源选择它想要包含的内容,并决定每个包含的资源的URI。
使用“复数”名称表示集合资源原型:
http://api.example.com/device-management/managed-devices
http://api.example.com/user-management/users
http://api.example.com/user-management/users/{id}/accounts
复制代码
存储
存储是客户端管理的资源库。 存储资源允许API客户端放入资源,将其退出,并决定何时删除它们。 存储永远不会生成新的URI。 相反,每个存储的资源都有一个客户端在最初放入存储时选择的URI。
使用“复数”名称表示存储资源原型:
http://api.example.com/cart-management/users/{id}/carts
http://api.example.com/song-management/users/{id}/playlists
复制代码
控制器
控制器资源模拟程序概念。 控制器资源就像可执行函数,带有参数和返回值; 输入和输出。
使用“动词”表示控制器原型:
http://api.example.com/cart-management/users/{id}/cart/checkout
http://api.example.com/song-management/users/{id}/playlist/play
复制代码
保持一致性
使用一致的资源命名约定和URI格式,以最小化和最大可读性和可维护性。 您可以实现以下设计提示以实现一致性:
使用正斜杠(/)表示层次关系
正斜杠(/)字符用于URI的路径部分,以指示资源之间的层次关系。 例如:
http://api.example.com/device-management
http://api.example.com/device-management/managed-devices
http://api.example.com/device-management/managed-devices/{id}
http://api.example.com/device-management/managed-devices/{id}/scripts
http://api.example.com/device-management/managed-devices/{id}/scripts/{id}
复制代码
不要在URI中使用尾部正斜杠(/)
作为URI路径中的最后一个字符,正斜杠(/)不会添加语义值,并可能导致混淆。 最好完全放弃它们。
http://api.example.com/device-management/managed-devices/ http://api.example.com/device-management/managed-devices /*This is much better version*/ 复制代码
使用连字符( - )来提高URI的可读性
要使您的URI易于扫描和解释,请使用连字符( - )字符来提高长路径段中名称的可读性。
http://api.example.com/inventory-management/managed-entities/{id}/install-script-location //More readable
http://api.example.com/inventory-management/managedEntities/{id}/installScriptLocation //Less readable
复制代码
不要使用下划线(_)
)字符可能会在某些浏览器或屏幕中被部分遮挡或完全隐藏。
**为避免这种混淆,请使用连字符( - )而不是下划线(
)。**http://api.example.com/inventory-management/managed-entities/{id}/install-script-location //More readable
http://api.example.com/inventory_management/managed_entities/{id}/install_script_location //More error prone
复制代码
在URI中使用小写字母
方便时,URI路径中应始终首选小写字母。
RFC 3986 将URI定义为区分大小写,但方案和主机组件除外。 例如:
http://api.example.org/my-folder/my-doc //1 HTTP://API.EXAMPLE.ORG/my-folder/my-doc //2 http://api.example.org/My-Folder/my-doc //3 复制代码
在上面的例子中,1和2是相同的,但3不是。因为它使用大写字母的My-Folder。
不要使用文件扩展名
文件扩展名看起来很糟糕,不会增加任何优势。 删除它们也会减少URI的长度。 没理由保留它们。
除了上述原因,如果您想使用文件扩展突出显示API的媒体类型,那么您应该依赖于通过Content-Type标头传达的媒体类型来确定如何处理正文的内容。
http://api.example.com/device-management/managed-devices.xml /*Do not use it*/ http://api.example.com/device-management/managed-devices /*This is correct URI*/ 复制代码
切勿在URI中使用CRUD函数名称
URI不应用于指示执行CRUD功能。 URI应该用于唯一标识资源,而不是对它们的任何操作。 应使用HTTP请求方法来指示执行哪个CRUD功能。
HTTP GET http://api.example.com/device-management/managed-devices //Get all devices
HTTP POST http://api.example.com/device-management/managed-devices //Create new Device
HTTP GET http://api.example.com/device-management/managed-devices/{id} //Get device for given Id
HTTP PUT http://api.example.com/device-management/managed-devices/{id} //Update device for given Id
HTTP DELETE http://api.example.com/device-management/managed-devices/{id} //Delete device for given Id
复制代码
使用查询参数过滤URI集合
很多时候,您会遇到需要根据某些特定资源属性对需要排序,过滤或限制的资源集合的要求。 为此,请不要创建新的API - 而是在资源集合API中启用排序,过滤和分页功能,并将输入参数作为查询参数传递。 例如:
http://api.example.com/device-management/managed-devices http://api.example.com/device-management/managed-devices?region=USA http://api.example.com/device-management/managed-devices?region=USA&brand=XYZ http://api.example.com/device-management/managed-devices?region=USA&brand=XYZ&sort=installation-date 复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Big Java Late Objects
Horstmann, Cay S. / 2012-2 / 896.00元
The introductory programming course is difficult. Many students fail to succeed or have trouble in the course because they don't understand the material and do not practice programming sufficiently. ......一起来看看 《Big Java Late Objects》 这本书的介绍吧!