mjordan/irc

Islandora REST 接口的客户端构建库。

dev-master 2018-08-29 02:35 UTC

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 实例上

安装

  1. git https://github.com/mjordan/irc.git
  2. cd irc
  3. 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