当前位置: 首页 > 知识库问答 >
问题:

Rest API设计:如何为具有多个子资源的发布资源创建restful API?

洪楷
2023-03-14

我们是一个电子商务网站,希望创建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/

共有1个答案

何涵忍
2023-03-14

如果imagesreviews都是产品的组成部分,并且如果没有这些存在,产品就不可能存在,那么我会选择方法1,因为在第3中,您定义了许多endpoint,用户可能会发现这些endpoint不清楚如何使用它们。

否则,方法2似乎是最好的,也是最清楚的一个。让您的客户创建产品的所有基本细节。响应该post请求,应将201 created与包含指向新创建资源的URL的location头一起发送。然后要编辑产品本身,直接发送请求/api/product/{id}/。要更新/删除/创建子资源(即imagereview),请分别向/API/product/{id}/images//API/product/{id}/reviews/发送相应的请求。这样,您就可以清晰地分离关注点,并使用易于理解和一致的API。如果添加了任何其他资源,您仍然在单个根endpoint区域中操作,而不是在多个根endpoint区域中操作(如方法3所示)。

此外,方法1的缺点是,可能很难为客户端构造主体-例如,可选的images-是否会发送空值或根本没有键?

 类似资料:
  • 如果通过传递profileId或profileName(两者都是唯一的),可以对配置文件资源执行PUT和DELETE操作,那么形成URL的正确方法是什么? 我想在发送时支持对配置文件资源的更新和删除操作,并在发送时支持对配置文件资源的更新和删除操作。 发送profileId时,用于执行PUT操作的URL如下所示: 发送profileName时,URL是什么样子的?profileName是否应作为查

  • 我正在做一个生产线的模拟,它是通过Excel建立的。现在有一个,需要为每台机器自由设置工人班次,总共三个班次。 我的想法是创建三个不同的时间表,表示三个班次中的每一个,然后在ResourcePool中使用If语句设置每个班次的使用。如图所示,在此处输入图像描述 提前致谢

  • 介绍 Vant 是基于有赞 Zan Design System 视觉规范实现的组件库,在这里可以下载 Vant 的设计资源。 设计稿 组件设计稿(Sketch) 包含 Sketch 格式的色彩规范、字体规范、组件设计规范。 色彩规范 字体规范 组件规范 下载 图标设计稿(Sketch) 包含 Sketch 格式的图标库资源。 下载 Axure 元件库 Axure 元件库,由社区的 @axure-t

  • 我正在使用WebSphere Liberty(wlp)和JAX-RS开发一个服务。我想在我的服务中运行多个计划程序,定期执行不同的任务。我已经安装了Concurrent-1.0特性,并定义了 在实现的init类中 如何在其他类中创建更多实例? 我可以找到的指针,例如:http://www.adam-bien.com/roller/abien/entry/injection_an_executors

  • 我有3分贝实体。产品-id,名称。/产品订单-id,日期。/Orders OrderDetail-OrderID,productId,Price。订单/{orderId}/orderDetails 谢了!

  • 我想知道如何设计一个RESTFUL api,用于一次性创建一个资源及其相关资源。 例如,我想使用RESTFUL API创建一个包含项目列表的订单,例如: null 那么,将项目放在请求正文中,并只向发布一次是一种好方法吗?还是针对这种情况有其他更好的设计? 谢谢你!