mjordan / irc
Islandora REST 接口的客户端构建库。
Requires
- php: >=5.5.0
- guzzlehttp/guzzle: ~6.0
Requires (Dev)
- cocur/background-process: ^0.7.0
- phpunit/phpunit: 4.8.*
- squizlabs/php_codesniffer: ~2.3
This package is auto-updated.
Last update: 2024-08-29 04:43:06 UTC
README
用于构建 Islandora REST 接口的客户端库的 PHP 库,通过应用简单的 CRUD(创建、读取、更新、删除)操作模式到 Islandora 7.x 对象、关系和数据流。还提供对 Islandora REST 模块的 Solr 端点的访问。该库的目标是在提供完整 HTTP 响应访问的同时隐藏与 REST 接口交互的细节。
要求
- 在运行 REST 客户端应用程序/脚本的系统上
- PHP 5.5.0 或更高版本。已测试与 PHP 5.5、5.6、7.0、7.1 版本兼容。
- Composer
- 在 Islandora 实例上
- Islandora REST
- 可选,Islandora REST Authen
- 可选,Islandora REST Extras(有关更多信息,请参阅下面的“生成 DC XML”部分)。
安装
git https://github.com/mjordan/irc.git
cd irc
php composer.phar install
(或在您的系统上使用等效命令,例如./composer install
)
或者,使用 composer
composer require mjordan/irc
并在 composer.json 文件中
"require": { "mjordan/irc": "dev-master" }
用法
使用一组客户端默认值实例化 Islandora 对象、关系和数据流。通常,您只需要提供一个默认的 base_uri
和您需要的任何头部信息,例如用于身份验证。对于大多数请求,都会为您提供适当的 Content-Type
头部信息。Guzzle 的 http_errors
请求选项始终设置为 false
。
<?php include 'vendor/autoload.php'; $client_defaults = array( 'base_uri' => 'https://:8000/islandora/rest/v1/', 'headers' => array('X-Authorization-User' => 'admin:admin'), ); $islandora_object = new mjordan\Irc\IslandoraObject($client_defaults); $relationship = new mjordan\Irc\Relationship($client_defaults); $object = new mjordan\Irc\Datastream($client_defaults);
Islandora 对象和数据流提供 read()
、create()
、delete()
和 update()
方法;关系提供 read()
、create()
和 delete()
方法。在所有情况下,这些方法都返回一个 Guzzle 响应对象。然而,对象、关系和数据流对象提供方便的属性,您可以使用这些属性来检查各种方法的成功状态(例如,->created
、->deleted
),以下示例中进行了说明。
身份验证
由于您可以传递任意的请求头部,因此您可以使用通过头部使用的方法进行任何身份验证。Islandora REST Authen 模块提供了一种方便的方式,使用单个 'X-Authorization-User'
请求头部对 REST 请求进行身份验证。以下示例使用此头部。
示例
Islandora 对象
<?php include 'vendor/autoload.php'; $client_defaults = array( 'base_uri' => 'ihttps://:8000/islandora/rest/v1/', 'headers' => array('X-Authorization-User' => 'admin:admin'), ); $object = new mjordan\Irc\IslandoraObject($client_defaults); // Read an object. CRUD methods on objects return a Guzzle response object. $response = $object->read('islandora:100'); // Create an object. When we create a new object, we can optionally assign a content // model and parent. $response = $object->create('islandora', 'admin', "My new object", "islandora:sp_basic_image", "islandora:testcollection"); // True if successfully created, false if not. var_dump($object->created); // You can also access the new object's PID. var_dump($object->pid); // Update an object. $response = $object->update('islandora:150', array('owner' => 'mark')); // True if successfully updated, false if not. var_dump($object->updated); // Delete an object. $response = $object->delete('islandora:200'); // True if successfully deleted, false if not. var_dump($object->deleted); // For read(), create(), update(), and delete(). $response_code = $response->getStatusCode(); var_dump($response_code); $response_body = (string) $response->getBody(); var_dump($response_body);
关系
注意,关系没有 update()
方法。要更改关系,您需要先删除它,然后添加替换关系。
<?php include 'vendor/autoload.php'; $client_defaults = array( 'base_uri' => 'https://:8000/islandora/rest/v1/', 'headers' => array('X-Authorization-User' => 'admin:admin'), ); $rel = new mjordan\Irc\Relationship($client_defaults); $response = $rel->read('islandora:123', array('predicate' => 'hasModel', 'uri' => 'info:fedora/fedora-system:def/model#')); // Create a relationship. $params = array( 'uri' => 'info:fedora/fedora-system:def/relations-external#', 'predicate' => 'isMemberOfCollection', 'object' => $parent_pid, 'type' => 'uri', ); $rel = new Relationship($this->clientDefaults); $response = $rel->create('islandora:456', $params); // True if successfully created, false if not. var_dump($rel->created); $response = $rel->delete('islandora:789', array('predicate' => 'hasModel', 'uri' => 'info:fedora/fedora-system:def/model#')); // True if successfully deleted, false if not. var_dump($rel->deleted); // For read(), create(), and delete(). $response_code = $response->getStatusCode(); var_dump($response_code); $response_body = (string) $response->getBody(); var_dump($response_body);
数据流
<?php include 'vendor/autoload.php'; $client_defaults = array( 'base_uri' => 'https://:8000/islandora/rest/v1/', 'headers' => array('X-Authorization-User' => 'admin:admin'), ); $ds = new mjordan\Irc\Datastream($client_defaults); $response = $ds->read('islandora:100', 'MODS'); $response = $ds->create( $object->pid, 'MODS', '/tmp/MODS.xml', array('label' => 'I am a new MODS document') ); // True if successfully created, false if not. var_dump($ds->created); $response = $ds->delete('islandora:100', 'MODS'); var_dump($ds->deleted); // True if successfully deleted, false if not. var_dump($ds->deleted); $response = $ds->update('rest:1322', 'MODS', '/tmp/MODSNEW.xml', array('label' => 'Let us try that again.')); // These two properties are true if successfully updated, false if not. var_dump($ds->propertiesUpdated); var_dump($ds->contentUpdated); // For read(), create(), update(), and delete(). $response_code = $response->getStatusCode(); var_dump($response_code); $response_body = (string) $response->getBody(); var_dump($response_body);
查询 Solr
Solr 对象不提供 ->read()
方法,它们提供 ->query()
,其中应包含一个原始 Solr 查询字符串。它们还提供方便的属性 ->numfound
、->start
和 ->docs
,它们提供对原始 Solr 响应中相应部分的直接访问。
<?php include 'vendor/autoload.php'; // New objects, datastreams, relationships, and Solr queries need // to pass in Guzzle client defaults. $client_defaults = array( 'base_uri' => 'https://:8000/islandora/rest/v1/', 'headers' => array('X-Authorization-User' => 'admin:admin'), ); // Query Solr. $solr = new mjordan\Irc\Solr($client_defaults); $solr_response = $solr->query('dc.title:testing?fl=PID'); echo "NumFound: " . $solr->numFound . "\n"; echo "Start: " . $solr->start . "\n"; echo "Docs: "; var_dump($solr->docs) . "\n";
异常
Guzzle RequestException
和缺失数据流文件错误会被重新抛出为 IslandoraRestClientException
异常。
维护者
开发和反馈
- 欢迎提出错误报告、功能请求和文档改进。
- 如果您想提交拉取请求,请首先打开一个问题。
- 使用
composer tests
运行测试,并使用composer style
运行 PSR2 风格检查。
许可证
Unlicense