【问题标题】:Handling a batch REST request in PHP在 PHP 中处理批处理 REST 请求
【发布时间】:2014-07-06 11:19:33
【问题描述】:

对于一个 PHP 应用程序,我正在集成一个能够一次接收多个嵌套 HTTP 请求的 REST 服务。这与谷歌日历 API 相同:https://developers.google.com/google-apps/calendar/batch

但是,我不确定将单个请求解析为多个请求的最佳方法。对服务器的请求(来自 Google 示例)如下所示:

POST /batch HTTP/1.1
Authorization: Bearer your_auth_token
Host: host
Content-Type: multipart/mixed; boundary=batch_foobarbaz
Content-Length: total_content_length

--batch_foobarbaz
Content-Type: application/http
Content-ID: <item1:12930812@barnyard.example.com>

GET /farm/v1/animals/pony

--batch_foobarbaz
Content-Type: application/http
Content-ID: <item2:12930812@barnyard.example.com>

PUT /farm/v1/animals/sheep
Content-Type: application/json
Content-Length: part_content_length
If-Match: "etag/sheep"

{
    "animalName": "sheep",
    "animalAge": "5"
    "peltColor": "green",
}

--batch_foobarbaz

顶部(--batch_foobarbaz 上方)应该在$_SERVER 中可用。对于嵌套请求,我显然不能使用它。

我目前的行动计划是:

  • 创建一个request 类,其中包含每个标头的属性
  • 创建一个 request 解析类来解析每个单独的 request 对象
  • 对于 /batch 请求,将使用包装器将批处理拆分为多个较小的 request 对象,并从提取的嵌套请求中提供它们。
  • 对于所有正常/单个请求,它只需使用来自标头的数据填充request。然后,嵌套请求和单个请求都将通过 request 解析类进行相同的处理。

请求的拆分将在boundary 上使用explode() 完成。但是之后?使用正则表达式解析每个部分以获取每个 key:value?并期望有效载荷被换行?或者是否有一些可用的函数/类可以为我做到这一点?

非常感谢任何有关如何解决此问题的建议。响应也将是一个多部分/混合消息,每个请求都有响应。这样每个请求仍然会使用 REST 原则。

【问题讨论】:

  • 你能找到关于如何在 PHP 中处理批处理请求的解决方案吗?

标签: php rest


【解决方案1】:

1)如果您绝对坚持multipart/mixed 风格,那么关注旧的 Stack Overflow 文章可能会有用:

2) 如果您可以影响 REST API 设计,那么如果您支持一个带有批处理数据输入的 JSON,那么对于您(解析器)和您的用户都会更容易。 REST API 应该是为了简化事情,而不是让事情变得更复杂。

例如看例如这里(一些谷歌搜索结果“batch rest api”):

【讨论】:

    猜你喜欢
    • 2016-08-04
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多