English | Español | Português Brasileiro
Cliente PHP para as APIs GraphQL e REST do Thoth.
Esta biblioteca pode ser instalada via Composer:
composer require thoth-pub/thoth-client-phpDocumentação da API: https://api.thoth.pub/graphiql
$client = new \ThothApi\GraphQL\Client();As classes de consultas, mutações, schemas, inputs, enums e scalars são geradas a partir do schema de introspecção GraphQL do Thoth. A API mais simples é chamar no cliente o método com o mesmo nome da operação GraphQL.
$works = $client->works(5, [
'workId',
'fullTitle',
]);
echo $works[0]->getWorkId();
echo $works[0]->getFullTitle();Os argumentos podem ser passados por posição ou por nome. Valores de enum podem ser passados
diretamente com constantes das classes de enum geradas. OperationRequest::enum() continua disponível
para operações customizadas.
use ThothApi\GraphQL\Enums\Direction;
use ThothApi\GraphQL\Enums\WorkField;
$works = $client->works([
'publishers' => ['71faf1c3-900a-4b8c-bca7-4f927699fb90'],
'limit' => 5,
'order' => [
'field' => WorkField::PUBLICATION_DATE,
'direction' => Direction::DESC,
],
], [
'workId',
'fullTitle',
'doi',
]);A seleção pode incluir campos aninhados. Campos que retornam objetos ou listas são hidratados em classes geradas de schema.
$work = $client->work('5a5b0fe3-03a9-444b-b221-ecae5370ff30', [
'workId',
'fullTitle',
'titles' => [
'titleId',
'fullTitle',
],
'imprint' => [
'imprintId',
'publisher' => [
'publisherId',
'publisherName',
],
],
]);
echo $work->getImprint()->getPublisher()->getPublisherName();
echo $work->getTitles()[0]->getFullTitle();O executor genérico continua disponível quando for melhor usar diretamente as classes geradas de operação. Ele retorna arrays brutos, sem hidratar objetos de schema.
use ThothApi\GraphQL\Queries\WorksQuery;
$works = $client->execute(WorksQuery::operation([
'limit' => 5,
], [
'workId',
'fullTitle',
]));Também é possível executar GraphQL bruto. O token configurado com setToken() é usado nesse caminho.
$data = $client->rawQuery('query { workCount }');Para executar mutações, forneça ao cliente um personal access token válido.
$client->setToken($token);Inputs são gerados a partir do schema. Eles podem ser criados com arrays, a partir de DTOs que expõem
getAllData() ou de objetos JsonSerializable.
use ThothApi\GraphQL\Enums\SubjectType;
use ThothApi\GraphQL\Inputs\NewSubject;
$newSubject = new NewSubject([
'workId' => '5a5b0fe3-03a9-444b-b221-ecae5370ff30',
'subjectType' => SubjectType::BIC,
'subjectCode' => '1D',
'subjectOrdinal' => 3,
]);
$subjectId = $client->createSubject($newSubject);Por padrão, mutações que retornam objetos selecionam o primeiro campo *Id e retornam esse valor
escalar.
$subjectId = $client->createSubject($newSubject);Informe uma seleção explícita quando quiser receber um objeto de schema hidratado com getters,
setters e toArray().
$subject = $client->createSubject($newSubject, [
'subjectId',
'subjectCode',
]);
echo $subject->getSubjectId();
echo $subject->getSubjectCode();
print_r($subject->toArray());As classes de schema também podem ser instanciadas e populadas manualmente.
use ThothApi\GraphQL\Schemas\Work;
$work = (new Work())
->setWorkId('5a5b0fe3-03a9-444b-b221-ecae5370ff30')
->setFullTitle('Titulo de exemplo');
echo $work->getFullTitle();
print_r($work->toArray());Regere as classes GraphQL a partir do schema atual do Thoth:
composer generate-graphql-clientUma exceção do tipo QueryException é lançada em caso de erro na solicitação à API GraphQL. É possível recuperar a mensagem do erro, os detalhes, a query e as variáveis enviadas.
try {
$client->createWork(new \ThothApi\GraphQL\Inputs\NewWork([
'doi' => 'https://doi.org/10.00000/00000000',
]));
} catch (\ThothApi\Exception\QueryException $exception) {
echo $exception->getMessage();
echo print_r($exception->getDetails(), true);
echo $exception->getQuery();
echo print_r($exception->getVariables(), true);
}Documentação da API: https://export.thoth.pub/
$client = new \ThothApi\Rest\Client();O client REST exporta metadados nos formatos disponibilizados pela API de exportação do Thoth.
$formats = $client->formats();
$metadata = $client->work(
'doideposit::crossref',
'e0f748b2-984f-45cc-8b9e-13989c31dda4'
);try {
$result = $client->publisher('foo', '42b3315e-07e9-4e23-92ae-86932e4ef0e3');
} catch (\ThothApi\Exception\RestException $exception) {
echo $exception->getMessage(); // "foo is not a valid metadata specification"
}O construtor de ambos os Clientes pode receber um array opcional para adicionar configurações personalizadas de solicitação do Cliente HTTP Guzzle.
$client = new Client([
'allow_redirects' => false,
'connect_timeout' => 3.14,
'timeout' => 3.14,
'proxy' => [
'http' => 'http://localhost:8125',
'https' => 'http://localhost:9124',
'no' => ['.mit.edu', 'foo.com'],
],
'debug' => true,
]);Os clientes fazem requisições para os endereços padrão das APIs Thoth: https://api.thoth.pub/ para a API GraphQL e https://export.thoth.pub/ para a API REST. Se você deseja utilizar um endereço diferente (como "localhost" para testes), basta adicionar a opção "base_uri" com o novo endereço no construtor do cliente.
$client = new Client(['base_uri' => 'localhost:8000']);Idealizado e patrocinado por Thoth.
Desenvolvido por Lepidus Tecnologia.
Licenciado sob a Licença Apache, Versão 2.0 - Veja o arquivo de licença.
Copyright (c) 2024-2026 Lepidus Tecnologia
Copyright (c) 2024-2026 Thoth Open Metadata