JSON-API设计

JSON-API design

假设我有不同类型的对象 HouseCar。现在我要补充评论。

有什么更好的练习? 有端点:

/api/house/:houseId/comments

/api/car/:carId/comments

或一般 api 评论,例如:

/api/comments/:generalId

对我来说,产品类型是实现细节。要成为 REST 风格,我会用

创建 API

/api/product/[productID]

此端点将支持 GET(获取给定产品)、POST(更新给定产品)、DELETE

/api/product/

此端点将支持 GET(获取所有产品)、PUT(创建新产品)

/api/product/[productID]/comments/[commentID]

此端点将支持 GET(获取给定产品的给定评论)和 POST(更新给定评论)、DELETE(删除给定评论)。 在这种情况下,commentID 可能仅在每个资源中是唯一的,而不是全局的。

/api/product/[productID]/comments

此端点将支持 GET(获取产品的所有评论)和 PUT(创建新评论)、DELETE(删除产品的所有评论)

api/comments/[commentId]

此资源(使用 GET、POST、DELETE 操作)也很好。但它需要全球唯一的 commentId。如果您需要在不知道 productId 的情况下管理单独的评论,请随意公开此类端点。这并不违反 REST。

在这个 API 设计中,我们为每个产品和评论提供了单独的资源。 我们还有所有产品的资源,以及给定产品的所有评论的资源。每个资源都可能支持 GET、POST、PUT、DELETE。您可以省略一些操作(例如,当您不想支持编辑评论时,不要在 /api/product/[productID]/comments/[commentID] 上公开 POST

编辑:正如@lospejos 在评论中所建议的那样,您可以使用复数形式(产品、评论)。无论哪种方式,您的 API 都将是 REST 风格的,每个 post/comment 都是单独的资源。