RESTAPI设计:如何创建RESTfulAPI来发布具有多个子资源的资源?
我们是一个电子商务网站,希望创建一个API,为所有客户提供一个接口,通过该API发送产品相关信息。我们目前需要3种类型的产品信息:RESTAPI设计:如何创建RESTfulAPI来发布具有多个子资源的资源?,rest,api,restful-architecture,api-design,Rest,Api,Restful Architecture,Api Design,我们是一个电子商务网站,希望创建一个API,为所有客户提供一个接口,通过该API发送产品相关信息。我们目前需要3种类型的产品信息: 基本细节:如价格、颜色等 图像:产品的图像 评论:对该产品的评论 方法1:允许客户端通过单个API发送所有信息 /api/product/ { "basicDetails" : {}, //json with all basic details of the product. "images": {}, //json containing arr
- 基本细节:如价格、颜色等
- 图像:产品的图像
- 评论:对该产品的评论
/api/product/
{
"basicDetails" : {}, //json with all basic details of the product.
"images": {}, //json containing array of images of the product.
"reviews": {} //json containing array of reviews of the product.
}
方法2:为所有子资源创建不同的API
/api/product/basicdetails/
/api/product/images/
/api/product/reviews/
方法3:为具有层次URI的所有子资源创建不同的API
/api/productBasicDetails/
/api/productImages/
/api/productReviews/
建议使用哪种restful方法?如果
图像和评论都是产品的组成部分,没有这些存在,产品就不可能存在,我会选择方法1,因为在3中,你定义了很多端点,用户可能会发现不清楚如何使用它们
否则,方法2似乎是最好的,也是最清晰的方法。让您的客户创建包含所有基本细节的产品。响应该POST
请求,应将创建的201
与包含指向新创建资源的URL的Location
标题一起发送。然后,要编辑产品本身,请直接发送请求/api/product/{id}/
。要更新/删除/创建子资源(即image
或review
),请分别向/api/product/{id}/images/
或/api/product/{id}/reviews/
发送适当的请求。通过这种方式,您将拥有清晰的关注点分离以及易于理解和一致的API。如果添加了任何其他资源,您仍然在单根端点区域而不是多个端点区域中操作(如方法3所示)
此外,方法1的缺点是,可能很难为客户端构造主体-例如可选的图像
-是否发送空值或根本没有键