【发布时间】: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 中处理批处理请求的解决方案吗?