raigu/x-road-client

用于使用PSR-18库发送X-Road请求的PHP库

v1.0.0 2023-05-28 08:11 UTC

This package is auto-updated.

Last update: 2024-08-28 11:03:44 UTC


README

Latest Stable Version License: MIT build codecov

用于消费X-Road服务的PHP库。

它将服务级别请求和响应暴露给最终应用程序,并隐藏低级逻辑(SOAP、HTTP)。

HTTP通信使用兼容PSR-18的客户机,该客户机必须单独安装。如果需要,这种方法提供了对HTTP层的完全控制。

兼容性

PHP ^8.0

(对于PHP ^7.2使用版本0.1.0)

安装

composer install raigu/x-road-client

使用

<?php
$service = \Raigu\XRoad\Service::create(
    'EE/COM/00000000/SubSys/Service/v0', // service name
    'EE/COM/00000000/SubSys', // client name
    \Raigu\XRoad\SecurityServer::create(
        'https://security-server.client.com', // client's security server
        new Client // Any PSR-18 compatible client.    
    )
);

$response = $service->request(<<<EOD
    <prod:testService xmlns:prod="http://test.x-road.fi/producer">
        <request>
            <responseBodySize>5</responseBodySize>
         </request>
    </prod:testService>
EOD
);

echo $response; // will output the service provider's response extracted from SOAP envelope 

文档

服务请求

服务请求可以根据WSDL使用像Anayze WSDLSoapUI这样的工具来制作。参见视频了解如何创建一个。

可以从X-Road目录下载WSDL。使用服务名称进行查找。

错误处理

如果

  • 收到状态码不是2xx的响应
  • 收到SOAP错误。
  • 其他通信问题

HTTP通信

如果您有一个不是PSR-18兼容但可以处理PSR-7请求和响应的客户机,则可以编写一个适配器。例如,如果您已经安装了Guzzle包并希望重用它,则可以创建一个像这样的适配器

class GuzzleAdapter implements \Psr\Http\Client\ClientInterface
{
    /**
     * @var \GuzzleHttp\Client
     */
    private $client;

    public function sendRequest(\Psr\Http\Message\RequestInterface $request): \Psr\Http\Message\ResponseInterface
    {
        return $this->client->send($request);
    }

    public function __construct()
    {
        $this->client = new \GuzzleHttp\Client();
    }
}

演示

检查此库的一种方法是在Docker中设置本地X-Road测试服务器并发出测试请求。

本地安装库。

$ git clone git@github.com:raigu/x-road-client.git
$ cd x-road-client
$ composer install

在Docker容器中运行X-Road测试服务器

$ docker run --rm -p 8080:8080 petkivim/x-road-test-service:v0.0.3

安装PSR-18客户端。在当前示例中,我们将使用

$ composer require php-http/curl-client

在项目的根目录下创建一个名为request.php的文件

<?php
require_once 'vendor/autoload.php';

$service = \Raigu\XRoad\Service::create(
    $name = 'NIIS-TEST/GOV/0245437-2/TestService/testService/v1',
    $client = 'NIIS-TEST/GOV/123456-7/testClient',
    \Raigu\XRoad\SecurityServer::create(
        'http://localhost:8080/test-service-0.0.3/Endpoint', // Win users: use your ip. Execute "docker-machine ip"
        new Http\Client\Curl\Client
    )
);

$response = $service->request(<<<EOD
    <prod:testService xmlns:prod="http://test.x-road.fi/producer">
        <request>
            <responseBodySize>5</responseBodySize>
            <responseAttachmentSize>0</responseAttachmentSize>
         </request>
    </prod:testService>
EOD
);

echo $response; // will output the service provider's response extracted from SOAP envelope 

执行脚本

$ php request.php

您应该看到输出

<ts1:request xmlns:ts1="http://test.x-road.fi/producer">
    <ts1:responseBodySize>5</ts1:responseBodySize>
    <ts1:responseAttachmentSize>0</ts1:responseAttachmentSize>
</ts1:request>

请参阅我的博客文章以获取有关手动测试X-Road服务的更多信息。

许可证

根据MIT许可