`
steven_cheng
  • 浏览: 28269 次
  • 来自: 北京
社区版块
存档分类
最新评论

REST API design rulebook 笔记(一)

阅读更多

      最近在看一本OReilly的书,很薄,但是对REST API设计有很多操作性很强的意见。由于很多原则很简单,解释说明部分就不翻译了。边读边写,记录一下读书笔记。

      前言和第一章都比较简单,略去。

 

      第二章 URI设计

      URIs

           REST接口使用URI寻址一个resource。URI是接口的唯一标识。

      URI格式

   原则:斜杠(/)用于分层

           原则:末尾不包含/

           原则:连字符-可以使URI可读性更好

           原则:下划线_不要使用

           原则:优先使用小写

           原则:不要包含扩展名

      在Web中的URI里,点号(.)一般用于区分文件名和扩展名。REST 接口不应该用URI中的虚文件名指明希望的格式。而是应该用Content-Type头,用media type,告诉对方如何处理请求体/响应体的内容。后面会讲到Media type的更多内容。

      P.S 为简化连接和更易调试,REST接口可以支持查询参数做为media type协商,见后续。“原则:支持用查询参数进行media type协商”。

      URI标准设计

   原则:在接口中使用一致的子域名

   原则:客户端开发指南中使用一致的子域名做为入口。

      Resource建模

      URI路径表示REST接口的resource模型,斜杠分割的路径片段与层级内的resource有一致的含义。比如,URI:

http://api.soccer.restapi.org/leagues/seattle/teams/trebuchet 

表明,如下URI都可以确定一个可寻址的resource

http://api.soccer.restapi.org/leagues/seattle/teams 

http://api.soccer.restapi.org/leagues/seattle 

http://api.soccer.restapi.org/leagues 

http://api.soccer.restapi.org 

Resource建模是一个确立API关键概念的过程。这个过程类似于对一个关系数据库系统的数据建模,或对一个面向对象系统的对象建模。

在确定URI路径前,首先应该先了解一下REST API resource的类型。

 

      Resource 元型

      类似于设计模式,resource有助于我们的设计与一般REST接口设计表达一致的结构和行为。REST API包含四种元型:document, collection, store, controller.

       为了对客户端暴露一个结构清晰表达清楚的resource模型,REST接口应该为每个Resource使用一种元型。为一致性目的,resource也应该避免混杂两种以上的元型。反之,则应该设计独立的resource,通过链接表达这种关系。

 

       Document

      一个document resource是一个单数名词,类似于一个对象实例或数据库的一条记录。一个典型的document的状态表述(representation)应该包含两部分,一个是本对象各字段的值,一个是其他关联对象的链接。由各字段值和链接组成的document元型,可以看作是其他元型的“元元型”,其它三种resource元型,可以看作是特殊的document元型。

以下都是document resource的URI

http://api.soccer.restapi.org/leagues/seattle 

http://api.soccer.restapi.org/leagues/seattle/teams/trebuchet 

http://api.soccer.restapi.org/leagues/seattle/teams/trebuchet/players/mike 

      document可以有子resource,用于描述详细的附属信息。子resource可以有不同的resource类型,它们可以同属同一个上层resource,所以,REST API逻辑上的根resource可以是一个document,这个称为docroot

 

      Collection

      Collection resource是服务端控制的resource的目录。客户端可以请求向其中加入一个新的resource. Collection负责选择或创建新的resource. Collection决定包含哪些resource,并且为每个被包含的resource提供URI.

例子:

http://api.soccer.restapi.org/leagues 

http://api.soccer.restapi.org/leagues/seattle/teams 

http://api.soccer.restapi.org/leagues/seattle/teams/trebuchet/players 

 

      Store

      Store是由客户端控制的resource的仓库。Store resource提供API,由客户端放入、取出,并由客户端决定何时删除。Store并不创建新的resource,因此,store不产生新的URI,每一个store resource的URI由客户端在放入时确定。

下面这个例子是,一个用户(id 1234)通过客户端程序把名字为alonso的resource放入自己的收藏夹。

PUT /users/1234/favorites/alonso 

 

      Controller

      Controller resource 有程序含义。Controller resource类似于可执行程序,有入参和返回值,或者输入输出。REST API依赖controller resource执行特定的操作,这些操作不可以是标准方法(创建、获取,更新,删除,即crud)。典型的controller名字在URI的末尾,没有子resource。下例中,客户端给一个用户重发警告:

POST /alerts/245743/resend

 

      注:这段resource元型确实很精彩。

 


分享到:
评论

相关推荐

    restful book 3

    - **REST.API.Design.Rulebook.Oct.2011.pdf** 和 **REST API Design Rulebook Oct 2011.pdf**:这两份文档可能是REST API设计的规则书,提供了设计高质量RESTful API的指导原则。 通过阅读这些文档,开发者可以...

    Django Restful 框架设计规范 - 英文原文

    根据提供的部分内容,文档《REST API Design Rulebook》是由Mark Massé编写的,其中包含了RESTful API设计的具体规则和最佳实践。虽然这部分内容没有详细列出具体的规则,但我们可以通过对RESTful API设计的理解来...

    A Rulebook for Arguments

    《A Rulebook for Arguments》对于任何需要在逻辑上进行有效表达和辩论的人来说,都是一本不可或缺的工具书。该书通过丰富的论证形式和实用的写作技巧,帮助读者建立清晰、有力的论证,并在辩论中占据优势。通过学习...

    rulebook-master.rar

    首先,"rulebook"很可能是一个规则引擎的实现,用于处理业务逻辑中的规则定义和执行。在许多领域,如金融、保险、决策支持系统等,规则引擎是不可或缺的工具,它能帮助开发者以声明式的方式编写和管理复杂的业务规则...

    程序员需要经常刷题吗-rulebook:100%Java,支持Lambda,具有简单直观的DSL的轻量级规则引擎

    一个简单直观的 Java 规则抽象100% Java · 支持Lambda ·简单、直观的 DSL ·轻量级 为什么是规则书? RuleBook 规则以 Java 开发人员的思维方式构建:Java 代码。 它们以程序员期望的方式执行:按顺序。 RuleBook ...

    RuleBook:RoboCup @Home 2019规则手册

    适用于RoboCup @Home 2019的RuleBook 2019规则本的状态为FINAL 。 从现在开始,仅可以合并拼写更正和次要说明,以及对计分表的增益以提高得分。 2020年《规则手册》的所有工作应推入2020年/《规则手册》。 欢迎...

    rulebook:使用正则表达式自动化您的风格指南

    规则手册 - 简单的每个项目 Linting 使用正则表达式制定项目特定的文本规则。 例子 $ echo "Make & use rules to avoid simple mistakes.\na = ! foobar; puts 'bar'\ndebugger;...- Rulebook Violation -> {regex:

    rulebook:IUF 规则的翻译

    在rulebook-master文件夹中,可能包含了不同阶段的版本,译者可以通过比较不同版本来检查修改和进展。 **总结** IUF规则手册的翻译工作是一项细致且重要的任务,涉及到文件格式的选择、目录结构的规划以及翻译质量...

    rulebook_archive:RoboCup@Home 联赛规则手册

    在"rulebook_archive-master"目录下,可能包含了历年的规则手册PDF文件,每一份手册都会涵盖以下几个关键知识点: 1. **比赛任务**:RoboCup@Home的比赛通常包含多个任务,如物体识别与抓取、语音理解和对话、导航...

    easy-rules-3.3.0jar.zip

    例如,可以创建一个Rule类,定义一个Fact对象,然后通过RuleBook运行规则。以下是一个简单的示例: ```java import org.jeasy.rules.annotation.Action; import org.jeasy.rules.annotation.Condition; import org....

    cyphersystem-foundryvtt:铸造VTT的Cypher系统

    从本质上讲,该系统只是一个相当简单的数字字符表。 包括用于Cypher游戏中通常掷骰的骰子宏。 宏允许自定义宏栏,甚至可以自定义宏本身,以完全按照您的需要使用Cypher系统。 这允许玩家和总经理使用他们可以在物理...

    ATP-EMTP的一些参考资料

    ATP-EMTP(Alternative Transient Program - Electro-Magnetic Transients Program)是一种广泛应用于电力系统分析的仿真软件,尤其在研究电磁暂态过程时极为重要。ATP-EMTP能够模拟电力系统的各种复杂动态行为,如...

    Black Crusade Calculators:战锤40k黑色远征和其他游戏的几个计算器-开源

    这是一个为Warhammer 40k Black Crusade以及最终的Dark Heresy和Rouge Trader的几种不同计算器设计的项目。 所有这些都是使用EasyGUI和py2exe在Python中完成的。当前计算器:黑色十字军贸易修饰符calc。 旨在帮助您...

    tidy-data-rulebook:这是最佳做法的列表,并汇总了我们收集,存储和交付数据以进行进一步分析和可视化时遇到的最常见错误

    每个变量构成一列。 每个观察结果形成一行。 每种类型的观察单位都构成一个表格。 常见数据结构缺陷 列标题是值,而不是变量名。 多个变量存储在一列中。 变量存储在行和列中。 多种类型的观测单位存储在同一张...

    RuleBookPlugin

    ・ / rulebook清单リストに登录された本のタイトルの一覧を表示する。 ・ / rurubook新未记入の本をコマンド実行者に与える。 ・ / rulebook删除<リスト内の本のタイトル>リストからすべて,もしくは対象の本を...

    farhome-rules:Farhome桌上型RPG规则集

    Rulebook包含实体书所做的一切,减去花式格式和图片。 字符表 面向亲身游戏者,以可打印的PDF格式提供。 怪物手册 在这里,您会找到一组预建的怪物状态块。 每种类型和级别都有约70个怪物街区。 魔法纲要 您可以...

    欧盟SEPA中即时支付SCT Instant原理介绍文档

    SEPA(Single Euro Payments Area)即时支付SCT Instant是欧洲支付领域的一项重要创新,旨在提供一种快速、安全且高效的欧元区内的实时电子支付解决方案。这一服务允许参与者在任何时间进行转账,无论周末还是节假日...

    cyberpunk2020-foundry:用于Cyber​​punk 2020的FoundryVTT系统。这是一项早期工作,目前比任何东西都存在更多漏洞

    一致的设计使人联想到Core Rulebook,并充分考虑了UI设计和用户体验。 追踪停电的装甲力量。 自动攻击武器。 弹药的支出和充值很容易从聊天消息中完成。 攻击命中值自动翻译为命中位置的名称。 我的目标是,首先以...

Global site tag (gtag.js) - Google Analytics