我是REST的新手,我注意到在某些RESTful服务中,它们使用不一样的资源URI进行更新/获取/删除和建立。 如 git
我对此URI命名约定有点困惑。 咱们应该使用复数仍是单数来建立资源? 决定的标准是什么? github
尽管最广泛的实践是使用复数的RESTful api,例如/api/resources/123
,但在一种特殊状况下,我发现使用单数名称比复数名称更合适/更具表达性。 一对一的关系就是这种状况。 特别是若是目标项目是值对象(在域驱动设计范式中)。 数据库
让咱们假设每一个资源都有一对一的accessLog
,能够将其建模为值对象,即不是实体,所以没有ID。 它能够表示为/api/resources/123/accessLog
。 经常使用动词(POST,PUT,DELETE和GET)会适当地表达意图,而且也代表这种关系确实是一对一的。 编程
为何不遵循一般接受单数形式的数据库表名称的流行趋势? 到那里,作完了-让咱们重复使用。 api
表命名难题:单数与复数名称 spa
对我来讲,最好有一个能够直接映射到代码的模式(易于自动化),这主要是由于代码将是两端。 设计
GET /orders <---> orders POST /orders <---> orders.push(data) GET /orders/1 <---> orders[1] PUT /orders/1 <---> orders[1] = data GET /orders/1/lines <---> orders[1].lines POST /orders/1/lines <---> orders[1].lines.push(data)
从API使用者的角度来看,端点应该是可预测的 code
理想地... 对象
GET /resources
应该返回资源列表。 GET /resource
应返回400级状态代码。 GET /resources/id/{resourceId}
应该返回带有一个资源的集合。 GET /resource/id/{resourceId}
应该返回一个资源对象。 POST /resources
应该批量建立资源。 POST /resource
应该建立一个资源。 PUT /resource
应该更新资源对象。 PATCH /resource
应该仅经过发布更改的属性来更新资源。 PATCH /resources
应该批量更新资源,仅发布更改的属性。 DELETE /resources
应该删除全部资源; 只是在开玩笑:400状态码 DELETE /resource/id/{resourceId}
这种方法最灵活,功能最丰富,但开发时间也最长。 所以,若是您很着急(在软件开发中一般如此),只需命名端点resource
或复数形式的resources
。 我更喜欢单数形式,由于它可让您选择以编程方式进行内省和评估,由于并不是全部复数形式都以“ s”结尾。 资源
综上所述,不管出于何种缘由,开发人员最经常使用的选择是使用复数形式。 这最终是我选择的路线,若是您查看诸如github
和twitter
类的流行api,这就是它们的做用。
决定的一些标准多是:
所以,取决于您。 不管您作什么,都要保持一致。
个人两分钱:花费时间从复数变为单数或反之亦然的方法是浪费CPU周期。 我多是高中生,可是在个人时代,事物被称为相同。 我如何查找有关人的方法? 没有规律的表达不会覆盖人和人,而不会产生不良反作用。
英文复数能够是很是任意的,它们没必要要地妨碍了代码。 遵照一个命名约定。 计算机语言应该是数学上的清晰度,而不是模仿天然语言。