innmind / rest-bundle
Requires
- php: >=5.5
- guzzlehttp/guzzle: ~5.0
- innmind/rest-client: ~2
- innmind/rest-server: ~2
- innmind/url-resolver: ^1.0
- symfony/config: ~2.7|~3.0
- symfony/console: ~2.7|~3.0
- symfony/dependency-injection: ~2.7|~3.0
- symfony/filesystem: ~2.7|~3.0
- symfony/framework-bundle: ~2.7|~3.0
- symfony/http-kernel: ~2.7|~3.0
Requires (Dev)
- innmind/neo4j-onm: ~1.0
README
为innmind/rest-server
库提供包装,允许您轻松地暴露REST L3 API。
此Bundle提供了在symfony项目中完全集成库的功能。它还添加了一个名为服务器功能的新特性;简单地说,它暴露一个路由OPTIONS *
,该路由将输出通过此Bundle暴露的路由列表。目标是允许客户端发现,您可以想象一个REST客户端,它可以在尝试发送资源之前预先获取所有资源定义,以便提前知道它尝试发送的资源是否与定义匹配。
安装
composer require innmind/rest-bundle
通过在项目的app/AppKernel.php
中添加以下行来启用Bundle
// app/AppKernel.php // ... class AppKernel extends Kernel { public function registerBundles() { $bundles = array( // ... new Innmind\RestBundle\InnmindRestBundle, ); // ... } // ... }
然后,在配置中指定您的资源
innmind_rest: server: collections: [] #same configuration as the rest server library prefix: /api/prefix #optional
服务器
存储
要定义一个存储,您可以为服务创建一个具有innmind_rest.server.storage.abstract.doctrine
或innmind_rest.server.storage.abstract.neo4j
作为父类的服务。然后您需要指定用于构建服务的第一个参数,即实体管理器实例(一个doctrine或neo4j实例);并使用标签innmind_rest.server.storage
标记服务,Bundle将查找此标签的alias
属性以供以后使用(用于指定资源上的存储的名称)。
格式
由于允许的格式通过编码器处理,您可以通过在要添加的编码器服务上添加标签来声明新的格式。
内置的json
格式的示例
innmind_rest.server.serializer.encoder.json: class: Innmind\Rest\Server\Serializer\Encoder\JsonEncoder tags: - { name: serializer.encoder } - { name: innmind_rest.server.format, format: json, mime: application/json, priority: 10 }
事件
在大多数情况下,您可能只想修改KernelEvents::RESPONSE
或Events::{STORAGE}_READ_QUERY_BUILDER
(STORAGE
可以是DOCTRINE
或NEO4J
)以添加查询限制,例如连接的用户。
您可以通过查看Events.php
来查看您可用的所有事件。
客户端
要使用API,您需要使用innmind_rest.client
服务。使用示例
use Innmind\Rest\Client\HttpResource; $client = $container->get('innmind_rest.client'); $resources = $client->getServer('http://example.com')->read('some_resource'); $resource = $client->getServer('http://example.com')->read('some_resource', 42); $toCreate = new HttpResource; $toCreate->set('someProperty', 'value'); $client->getServer('http://example.com')->create('some_resource', $toCreate); $toUpdate = new HttpResource; $toUpdate ->set('all', 'properties') ->set('must', 'be set'); $client->getServer('http://example.com')->update('some_resource', 42, $toUpdate); $client->getServer('http://example.com')->remove('some_resource', 42);
您可以使用$server->getResources()
查看服务器API公开的所有资源;它将返回一个关联数组,其中键为名称,值为定义。