danieldgsims / php-siren
编写 Siren 超媒体响应的辅助工具
0.9
2014-08-02 20:31 UTC
This package is auto-updated.
Last update: 2024-09-17 01:21:43 UTC
README
#Siren#
"Siren 是一种用于表示实体的超媒体规范。正如 HTML 用于在网站上视觉表示文档一样,Siren 是一种通过 Web API 表示实体的规范。"
您可以在 官方 GitHub 仓库 上了解更多关于 Siren 的信息并查看示例
#PHP-Siren#
这个库旨在通过面向对象的方法帮助您为 Hypermedia API 创建有效的 Siren 响应。PHP Siren 库由代表 Siren 中的数据结构(实体、链接、操作、字段)的组件和一个将结构序列化为 Siren+JSON 的编码器组成。
#PHP Siren 不涵盖的内容#
这个库仅帮助创建响应体。HTTP 响应的其他方面,如头信息,超出了这个库的范围。
#示例
$order = new Entity();
$order->addClass("order")
->setProperties(array(
"orderNumber" => 42,
"itemCount" => 3,
"status" => "pending"
));
$items = new Entity;
$items->addClass("items")
->addClass("collection")
->addRel("http://x.io/rels/order-items")
->setHref("http://api.x.io/orders/42/items");
$order->addEntity($items);
$customerInfo = new Entity;
$customerInfo->addClass("info")
->addClass("customer")
->addRel("http://x.io/rels/customer")
->setHref("http://api.x.io/customer")
->setProperties(array(
"customerId" => "pj123",
"name" => "Peter Joseph"
));
$link = new Link;
$link->addRel("self")
->setHref("http://api.x.io/customers/pj123");
$customerInfo->addLink($link);
$order->addEntity($customerInfo);
$orderNumber = new Field;
$orderNumber->setName("orderNumber")
->setType("hidden")
->setValue(42);
$productCode = new Field;
$productCode->setName("productCode");
$quantity = new Field;
$quantity->setName("quantity")
->setType("number");
$action = new Action;
$action->setName("add-item")
->setHref("http://api.x.io/orders/42/items")
->setMethod("POST")
->setTitle("Add Item")
->addField($orderNumber)
->addField($productCode)
->addField($quantity);
$order->addAction($action);
$self = new Link;
$self->addRel("self")
->setHref("http://api.x.io/orders/42");
$prev = new Link;
$prev->addRel("previous")
->setHref("http://api.x.io/orders/41");
$next = new Link;
$next->addRel("next")
->setHref( "http://api.x.io/orders/43");
$order->addLink($self);
$order->addLink($prev);
$order->addLink($next);
$response = (new Encoder)->encode($order);
print_r(json_encode($response, JSON_UNESCAPED_SLASHES));
示例输出
{
"class": [
"order"
],
"properties": {
"orderNumber": 42,
"itemCount": 3,
"status": "pending"
},
"entities": [
{
"href": "http://api.x.io/orders/42/items",
"rel": [
"http://x.io/rels/order-items"
],
"class": [
"items",
"collection"
]
},
{
"href": "http://api.x.io/customer",
"rel": [
"http://x.io/rels/customer"
],
"class": [
"info",
"customer"
],
"properties": {
"customerId": "pj123",
"name": "Peter Joseph"
},
"links": [
{
"rel": [
"self"
],
"href": "http://api.x.io/customers/pj123"
}
]
}
],
"actions": [
{
"name": "add-item",
"href": "http://api.x.io/orders/42/items",
"method": "POST",
"title": "Add Item",
"type": "application/x-www-form-urlencoded",
"fields": [
{
"name": "orderNumber",
"type": "hidden",
"value": "42"
},
{
"name": "productCode",
"type": "text"
},
{
"name": "quantity",
"type": "number"
}
]
}
],
"links": [
{
"rel": [
"self"
],
"href": "http://api.x.io/orders/42"
},
{
"rel": [
"previous"
],
"href": "http://api.x.io/orders/41"
},
{
"rel": [
"next"
],
"href": "http://api.x.io/orders/43"
}
]
}
自豪地在底特律建造