Jos*_*orp 5 c# api rest web-services hateoas
假设我有一个包含联系详细信息资源的应用程序资源,联系人详细信息包含地址资源.
例如.
Application
--> Name
--> Application Amount
--> Application Contacts
--> --> Contact 1
--> --> --> Address
--> --> Contact 2
--> --> --> Address
Run Code Online (Sandbox Code Playgroud)
在对应用程序执行POST时,我正在创建根应用程序.对于所有子资源,如应用程序联系人,我做一个POST来创建联系人1等...
我的问题是,Application =提交某个地方进行处理,但我不想在填写所有内容之前提交它,也就是所有子资源.
So the order of submission
1) Create Application Resource --> POST /Application --> Get ID
2) Create Contact 1 Resource --> POST /Application/id/Contacts --> Get ID
3) Create Contact 1 Address Resource --> POST /Application/id/Contacts/id/Addresses
4) Create Contact 2 Resource --> POST /Application/id/Contacts --> Get ID
5) Create Contact 2 Address Resource --> POST /Application/id/Contacts/id/Addresses
6) DECIDE TO SUBMIT HERE <--- ?? HOW?
Run Code Online (Sandbox Code Playgroud)
玩笑
您的设计不是 RESTful。您的资源可能与您的业务实体是一对一的映射?我不建议这样做,因为它会将域模型的内部暴露给外界,这可能会导致版本控制问题。它还使此类问题变得比实际需要的更加困难 - 尽管您可能正在使用强制执行此设计的 REST 框架 :-( 。
\n\n要记住的是,REST 中的资源是您希望外界看到的领域模型元素的抽象表示,它们很可能需要映射和转换才能转换为领域对象。它们可以任意复杂。
\n\n我想说,这里的解决方案是让创建应用程序的 POST也创建联系人及其地址。然后,客户端可以提供现有联系人和地址的 URL(服务器可以取消对域对象的引用),或者提供必要的详细信息以在单个POST中创建新联系人和地址。然后以事务方式创建和关联实体的责任就落在服务器身上。它只是返回对标识新应用程序的 URL 的引用。如果您需要知道联系人的 URL,那么您需要重新获取应用程序,它将包含它们。
\n\n假设您的资源采用 JSON mime 类型,初始 POST 可能如下所示:\n
\n\n{\n Name: "Application name",\n Amount: "123.00",\n Contacts: [\n {\n Name: "Contact name",\n Address: {\n HouseNumber: "45",\n StreetName : "Sesame Street"\n }\n }\n ]\n}\nReturn: {href: \xe2\x80\x9c/Application/6789\xe2\x80\x9d}\nRun Code Online (Sandbox Code Playgroud)\n\n然后,对 /Application/6789 的 GET 将返回类似以下内容:\n
\n\n{\n Name: "Application name",\n Amount: "123.00",\n Contacts: [\n { mimeType: "application/vnd.com.myStuff.contact+json", href: "/Contact/203" }\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1123 次 |
| 最近记录: |