尽管SO中有关于RESTful API命名约定的多个问题,但我找不到任何关于如何处理布尔类型端点(返回布尔值的端点)的参考资料。
考虑一个API,其中包含资源/products和/orders。订单可能引用多个产品,因此不可能删除与相关订单混淆的产品。在引用了订单的产品上调用DELETE /products/:id将返回409冲突状态码。
到目前为止,一切都很简单明了,但是如果客户端想要确认是否可以删除这个产品怎么办?
一个布尔类型的端点会返回true或false(或以某种方式包含这个值的JSON结构)。GET /products/:id/can-be-deleted。
问题在于can-be-deleted不是(子)资源,它是检查某些东西的动作... 如果RESTful API应该使用名词而不应该在端点中使用动词,那么它也不应该有形容词(deletable、completed)或谓词(can-be-deleted、is-ready)。
如果是这样,那么这方面的惯例是什么?这些信息是否应该有自己的端点?如果是这样,这个端点应该如何命名?如果不是这样,这些信息是否应该成为另一个端点的一部分(例如GET /products/:id返回这些信息)?
考虑一个API,其中包含资源/products和/orders。订单可能引用多个产品,因此不可能删除与相关订单混淆的产品。在引用了订单的产品上调用DELETE /products/:id将返回409冲突状态码。
到目前为止,一切都很简单明了,但是如果客户端想要确认是否可以删除这个产品怎么办?
一个布尔类型的端点会返回true或false(或以某种方式包含这个值的JSON结构)。GET /products/:id/can-be-deleted。
问题在于can-be-deleted不是(子)资源,它是检查某些东西的动作... 如果RESTful API应该使用名词而不应该在端点中使用动词,那么它也不应该有形容词(deletable、completed)或谓词(can-be-deleted、is-ready)。
如果是这样,那么这方面的惯例是什么?这些信息是否应该有自己的端点?如果是这样,这个端点应该如何命名?如果不是这样,这些信息是否应该成为另一个端点的一部分(例如GET /products/:id返回这些信息)?