petefox/graphaware-reco-client

此包已被废弃,不再维护。未建议替代包。

一个用PHP实现的API客户端,用于与GraphAware的推荐框架一起工作

1.0.0 2015-10-18 00:36 UTC

This package is not auto-updated.

Last update: 2022-07-23 06:56:27 UTC


README

该客户端旨在将GraphAware推荐端点的推荐和评分转换为易于处理的对象。

当前实现使用Guzzle,但可以轻松构建自己的以使用任何HTTP客户端库。

安装

使用composer获取包

composer require peterfox/graphaware-reco-client

基本设置

基本示例可以使用接口的通用实现,但也可以轻松创建自己的或扩展通用实现,以使其与您创建的推荐端点兼容。

use GraphAwareReco\Bridge\Guzzle\Client;
use GraphAwareReco\Bridge\Guzzle\RecommendationDescriptionBuilder;
use GraphAwareReco\Domain\Common\RecommendationFactory;
use GraphAwareReco\Domain\Common\RecommendationService;
use GraphAwareReco\Domain\Common\JsonResponseParser;
use GuzzleHttp\Client as Guzzle;
use GuzzleHttp\Command\Guzzle\GuzzleClient;

$service = new RecommendationService('http://localhost:7474/');

$description = RecommendationDescriptionBuilder::getDescriptionFromService($service);

$guzzle = new GuzzleClient(new Guzzle(), $description, ['defaults' => []]);

$client = new Client($guzzle, new RecommendationFactory(), new JsonResponseParser());

然后您只需提供参数数组即可获取一组推荐

$recommendations = $client->getRecommendations(['id' => 1, 'limit' => 30]);

实现自己的服务

您可以根据需要实现自己的设置,通用类主要用于示例,并且因为它们涵盖了大多数开发者为他们的服务设置推荐端点的方式。

###创建推荐服务

RecommendationService接口的目的是简单地声明端点的uri和您将用于请求推荐的任何参数。

use GraphAwareReco\Domain\Model\RecommendationService as RecommendationServiceInterface;

class RecommendationService implements RecommendationServiceInterface
{
    /**
     * @var string
     */
    private $baseUrl;

    /**
     * @param string $baseUrl
     */
    public function __construct($baseUrl)
    {
        $this->baseUrl = $baseUrl;
    }

    /**
     * @return string
     */
    public function getBaseUrl()
    {
        return $this->baseUrl;
    }

    /**
     * @return array
     */
    public function getUriParameters()
    {
        return ['id' => 'string'];
    }

    /**
     * @return array
     */
    public function getQueryParameters()
    {
        return ['limit' => 'string'];
    }

    /**
     * @return string
     */
    public function getRecommendationPath()
    {
        return '/graphaware/recommendation/{id}';
    }
}

###创建响应解析器

总体而言,响应解析器简单地用作将JSON作为数组接收并分解为推荐数组的一种方式。默认情况下,大多数设置将只是一个包含推荐的数组,所以在通用示例中不会发生任何事情,但如果有必要,您可以更改它。

use GraphAwareReco\Domain\Model\JsonResponseParser as ResponseParserInterface;

class JsonResponseParser implements ResponseParserInterface
{

    /**
     * @param array $result
     * @return array
     */
    public function parse(array $result)
    {
        return $result;
    }
}

###创建推荐模型

您的模型可能与通用示例不同,因为每个推荐都可能提供有关它所推荐节点的更多详细信息,因此您可以实现自己的。

use GraphAwareReco\Domain\Model\Recommendation as RecommendationInterface;
use GraphAwareReco\Domain\Model\Score;

class Recommendation implements RecommendationInterface
{
    /**
     * @var
     */
    private $identifier;
    /**
     * @var
     */
    private $uuid;
    /**
     * @var
     */
    private $score;

    public function __construct($identifier, $uuid, $score)
    {
        $this->identifier = $identifier;
        $this->uuid = $uuid;
        $this->score = $score;
    }

    /**
     * @return string
     */
    public function getUUID()
    {
        return $this->uuid;
    }

    /**
     * @return mixed
     */
    public function getItemIdentifier()
    {
        return $this->identifier;
    }

    /**
     * @return Score
     */
    public function getScore()
    {
        $this->score;
    }
}

###创建推荐工厂

如果您创建了您自己的推荐模型,则需要实现一个工厂,以便客户端可以使用每个推荐的日期来初始化其实例。

use GraphAwareReco\Domain\Common\Recommendation as RecommendationImpl;
use GraphAwareReco\Domain\Model\Recommendation;
use GraphAwareReco\Domain\Model\RecommendationFactory as RecommendationFactoryInterface;
use GraphAwareReco\Domain\Model\Score;

class RecommendationFactory implements RecommendationFactoryInterface
{
    /**
     * @param array $data
     * @return Recommendation
     */
    public function getRecommendation(array $data)
    {
        return new RecommendationImpl($data['id'], $data['uuid'], Score::fromArray($data['score']));
    }
}

测试

您可以为此库运行一些基本的测试,即PHPSpec和Behat。要运行Behat测试,您还必须运行tutu服务器以模拟GraphAware Reco设置。

###运行tutu

cd tutu && php -S localhost:7474 -t web -d date.timezone=UTC

###运行behat

bin/behat

###运行phpspec

bin/phpspec