如何解决从移动和Web调用子实体的WebAPI端点的最佳方法
数据库中有两个表 Item 和 ItemExtras 都具有相似的表结构。 用户界面中有两个价格字段,一个是 Price 和 ExtrasPrice 。
物料价格和其他字段将保存在物料表中。 并且ExtrasPrice字段需要在ItemExtras表中插入新条目。
创建和请求端点(CRUD)的最佳方法是什么?
- 为Item和ItemExtras创建两个单独的终点
- 为两者创建两个单独的端点,但处理Item端点的ItemExtras CRUD(通过调用端点)。
- 创建处理两个表CRUD的端点。
解决方法
通常,它取决于域逻辑和要求。既然没有,并且您正在寻求最好的方法,那么我对此有以下看法:
由于ItemExtras是Item的子实体,因此您必须先拥有Item才能创建或更新ItemExtras。如果没有父项记录,那么数据库中的ItemExtras记录是什么意思?
我将使用单个端点来创建整个Item对象,包括ItemExtras。像这样:
POST /api/items
您可以创建两个端点来为您的API的客户端提供灵活性,但是您可能要避免进行两个API调用。如果用于创建ItemExtras的API调用成功,但是用于创建Item的API调用失败,该怎么办?然后,如前所述,您的数据库中有“不正确”的数据(没有Item的情况下没有ItemExtras的使用)。
从您自己的API(您的选项二)调用另一个端点对我来说很奇怪。如果它们要互相呼叫,为什么要有多个端点?
如果您需要更新ItemExtras,而无需更新有关Item本身的任何详细信息,则可以创建如下的端点:
PUT /api/items/{itemId}/ItemExtras/{itemExtrasId}
这还迫使您的API客户端在更新ItemExtras记录之前先拥有一个Item记录。
希望这是有道理的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。