Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RESTAPI设计:如何创建RESTfulAPI来发布具有多个子资源的资源?_Rest_Api_Restful Architecture_Api Design - Fatal编程技术网

RESTAPI设计:如何创建RESTfulAPI来发布具有多个子资源的资源?

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,为所有客户提供一个接口,通过该API发送产品相关信息。我们目前需要3种类型的产品信息:

  • 基本细节:如价格、颜色等
  • 图像:产品的图像
  • 评论:对该产品的评论
方法1:允许客户端通过单个API发送所有信息

/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的缺点是,可能很难为客户端构造主体-例如可选的
图像
-是否发送空值或根本没有键