JSON-API设计
JSON-API design
假设我有不同类型的对象 House
和 Car
。现在我要补充评论。
有什么更好的练习?
有端点:
/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 都是单独的资源。
假设我有不同类型的对象 House
和 Car
。现在我要补充评论。
有什么更好的练习? 有端点:
/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 都是单独的资源。