Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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中定义操作_Rest_Design Patterns_Integration_Restapi_Integration Patterns - Fatal编程技术网

在RESTAPI中定义操作

在RESTAPI中定义操作,rest,design-patterns,integration,restapi,integration-patterns,Rest,Design Patterns,Integration,Restapi,Integration Patterns,我正在处理一个消息请求,该请求将包含用于在目的地中创建记录的完整请求详细信息 此集成在不同时间创建3种不同类型的记录-订单、装运、发票,即不可能一次创建所有记录,因此我需要让系统知道仅创建某些请求 我的问题是,在请求中添加此信息的最佳方式是什么 它需要在请求的主体中吗 { "OrderNumber": "1234", "operation": [ "orderentry", &quo

我正在处理一个消息请求,该请求将包含用于在目的地中创建记录的完整请求详细信息

此集成在不同时间创建3种不同类型的记录-订单、装运、发票,即不可能一次创建所有记录,因此我需要让系统知道仅创建某些请求

我的问题是,在请求中添加此信息的最佳方式是什么

它需要在请求的主体中吗

{
   "OrderNumber": "1234", 
   "operation": [
     "orderentry",
     "shipment",
     "invoice"
   ]
}
它需要在路径中吗

 /Order/create?operation=orderentry
它需要在单独的对象中吗?说

 {
   "operation": [
     "orderentry",
     "shipment",
     "invoice"
   ],
   "request": {
     "OrderNumber": "1234", 

   }
}

请求的有效uri应标识正在修改的文档;有效载荷应该是描述修改的文档

POST /home.html
Content-Type: text/plain

Bob, please fix the spelling error in the title.  Thanks.
/home.html标识我们正在修改的文档;正文告诉我们客户想要做的修改

该约束确保每个服务器、客户端、中介组件都以相同的方式解释此消息—请求的语义在任何地方都是相同的,响应的语义也是相同的

请注意,我们不会将请求发送到/home.html?edit或/home.html?operation=edit,因为我们知道这是两种不同的资源,因为标识符不同。通过正确识别我们在请求中修改的资源,我们可以让通用组件清楚地了解正在发生的事情,这样他们就可以做一些智能的事情,比如


信息是否需要在一个单独的对象中是模式设计的问题;HTTP实际上并不关心您在文档中使用的模式。

请求的有效uri应该标识正在修改的文档;有效载荷应该是描述修改的文档

POST /home.html
Content-Type: text/plain

Bob, please fix the spelling error in the title.  Thanks.
/home.html标识我们正在修改的文档;正文告诉我们客户想要做的修改

该约束确保每个服务器、客户端、中介组件都以相同的方式解释此消息—请求的语义在任何地方都是相同的,响应的语义也是相同的

请注意,我们不会将请求发送到/home.html?edit或/home.html?operation=edit,因为我们知道这是两种不同的资源,因为标识符不同。通过正确识别我们在请求中修改的资源,我们可以让通用组件清楚地了解正在发生的事情,这样他们就可以做一些智能的事情,比如


信息是否需要在一个单独的对象中是模式设计的问题;HTTP真的不关心您在文档中使用的模式。

如果您只想将HTTP用作传输机制,那么一切都会发生。另一方面,如果您想要开发一个真正的RESTful API,那么您应该了解REST。首先,考虑一下。我不认为API是REST的,除非它是一个3级API,但是即使在1级,也应该将API建模为一组资源。 每个资源都应该由一个唯一的URL标识,这样就排除了OP中三个选项中的两个

这些资源应该通过它们的URL来标识,但不是按照建议的那样。在第2级,动作由HTTP动词GET、POST、DELETE等表示。。因此,为了支持订单的创建,我设想了如下HTTP请求:

POST /orders HTTP/1.1
Content-Type: application/json
{
  "orderNumber": 1234
}
成功的请求应导致200范围内的响应200 OK、201 Created等

如果要创建装运资源,则可以过帐到装运收集资源:

POST /shipments HTTP/1.1
Content-Type: application/json
{
  "orderNumber": 1234
}
订单和装运等资源通常称为集合资源,因为它们代表其他资源的集合。它们通常只支持POST和GET谓词,GET将枚举集合中的所有资源

针对集合资源的每个POST通常会创建一个具有自己地址的“子资源”。例如,创建订单时,创建的地址可能是/orders/1234。这种资源通常支持GET、DELETE和PUT,但不支持POST


我强烈推荐Allamaraju Subrahmanyam的《RESTful Web服务烹饪书》,供任何想了解REST API设计的人使用。它很容易阅读,而且有很多实用的解决方案。

如果您只想使用HTTP作为传输机制,那么一切都会顺利进行。另一方面,如果您想要开发一个真正的RESTful API,那么您应该了解REST。首先,考虑一下。我不认为API是REST的,除非它是一个3级API,但是即使在1级,也应该将API建模为一组资源。 每个资源都应该由一个唯一的URL标识,这样就排除了OP中三个选项中的两个

这些资源应该通过它们的URL来标识,但不是按照建议的那样。在第2级,动作由HTTP动词GET、POST、DELETE等表示。。因此,为了支持订单的创建,我设想了一个HTT P请求如下:

POST /orders HTTP/1.1
Content-Type: application/json
{
  "orderNumber": 1234
}
成功的请求应导致200范围内的响应200 OK、201 Created等

如果要创建装运资源,则可以过帐到装运收集资源:

POST /shipments HTTP/1.1
Content-Type: application/json
{
  "orderNumber": 1234
}
订单和装运等资源通常称为集合资源,因为它们代表其他资源的集合。它们通常只支持POST和GET谓词,GET将枚举集合中的所有资源

针对集合资源的每个POST通常会创建一个具有自己地址的“子资源”。例如,创建订单时,创建的地址可能是/orders/1234。这种资源通常支持GET、DELETE和PUT,但不支持POST


我强烈推荐Allamaraju Subrahmanyam的《RESTful Web服务烹饪书》,供任何想了解REST API设计的人使用。它很容易阅读,并且充满了实用的解决方案。

谢谢您的回复。我将参考给定的参考资料。在我的源系统中,所有信息都存储在一个记录中,我知道资源应该在URL中标识并发送所需的正文。但要创建到特定订单的发货,我需要插入订单。另外,一次创建所有3条记录也是可能的,这意味着触发点在源代码中准备就绪,如果我触发所有3条单独的请求,那么目标可能没有准备好父记录?如何处理这些问题scenario@brahmajitammanaRESTAPI不必镜像数据库设计。数据库的结构应该是一个实现细节。如果你有更多的问题,请发布新的问题。当前OP没有描述您现在引入的约束。感谢您的回复。我将参考给定的参考资料。在我的源系统中,所有信息都存储在一个记录中,我知道资源应该在URL中标识并发送所需的正文。但要创建到特定订单的发货,我需要插入订单。另外,一次创建所有3条记录也是可能的,这意味着触发点在源代码中准备就绪,如果我触发所有3条单独的请求,那么目标可能没有准备好父记录?如何处理这些问题scenario@brahmajitammanaRESTAPI不必镜像数据库设计。数据库的结构应该是一个实现细节。如果你有更多的问题,请发布新的问题。当前OP没有描述您现在引入的约束。