Skip to content

PHP Client implementation for Gentics Mesh REST API.

License

Notifications You must be signed in to change notification settings

gentics/mesh-php-client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

71 Commits
Jun 29, 2022
Nov 7, 2018
Nov 14, 2023
Aug 21, 2019
Sep 5, 2018
Sep 5, 2018
Apr 23, 2019
Jun 29, 2022
Aug 29, 2018
Aug 4, 2022
Aug 21, 2023
Aug 21, 2023
Jun 29, 2022
Jun 29, 2022

Repository files navigation

Gentics Mesh PHP Client

PHP Client implementation for Gentics Mesh REST API.

Installation

composer require gentics/mesh-php-client

Basic usage

use Gentics\Mesh\Client\MeshClient;

require_once __DIR__ . '/vendor/autoload.php';

$client = new MeshClient("http://localhost:8080/api/v1");

// Load user info (sync)
$request = $client->me();
$response = $request->send();
echo $response->getBody();

// Load user info (async)
$promise = $request->sendAsync();
$promise->then(function ($response) {
  echo 'I completed! ' . $response->getBody();
});
$promise->wait();

// Load users and apply paging
$request = $client->findUsers(["perPage" => 1]);
$response = $request->send();
echo $response->getBody(); 

Authentication

$client = new MeshClient("http://localhost:8080/api/v1");

// You can either login and use the build-in cookie handling
// Keep in mind that your cookie will not be automatically refreshed.
// Any authenticated request will refresh the cookie and keep you authenticated.
$client->login("admin", "admin")->wait();

// Or use a dedicated API key which will never expire
// You can use the mesh-cli to generate a key
// Setting the API key will invalidate any previously set login token information
$client->setAPIKey("eyJ0eXAiOiJKV1QiLC … ZYYJbD8HllF6XZT0xRTxr3i4b9PY");

GraphQL Example

$client = new MeshClient("http://localhost:8080/api/v1");
$query = [
    "query" => "{users{elements{uuid, username}}}"
];
$request = $client->graphQL("demo", $query);
$response = $request->send();
$json = $response->toJson();
$this->assertEquals("anonymous", $json->data->users->elements[0]->username);

WebRoot Example

With webroot you can fetch any node which contains a segment field in the schema. The webroot endpoint is also able to directly return binary data.

$client = new MeshClient("http://localhost:8888/api/v1");
$request = $client->webroot("demo", "/images/yacht-pelorus.jpg");
$response = $request->send();
// You can check whether the webroot response returns json or otherwise binary data (e.g. image data)
$response->isJson();

CRUD Example

$client = new MeshClient("http://localhost:8080/api/v1");
$client->login("admin", "admin")->wait();

// 1. Create User
$request = [
  "username" => "guzzle",
    "password" => "geheim",
];
$uuid = "5725992507e748a1a5992507e7f8a115";
$userResp = $client->createUserWithUuid($uuid, $request)->send()->toJson();

// 2. Read user
$user = $client->findUserByUuid($uuid)->send()->toJson();

// 3. Update user
$user->username = "hugo";
$updated = $client->updateUser($uuid, $user)->send()->toJson();

// 4. Delete user
$client->deleteUser($uuid)->send();

Error Handling

By default exceptions will be thrown if the request fails (e.g. 4xx, 5xx error code).

try {
  $uuid = "5725992507e748a1a5992507e7f8a115";
  $client->deleteUser($uuid)->send();
} catch (ClientException $e) {
    // Error could indicate a 404
    $response = $e->getResponse();
    echo $response->getBody()->getContents();
}

Configuration

It is possible to configure the underlying Guzzle client:

// Change the default error behaviour to not throw error exceptions
$config = ['http_errors' => false];
$client = new MeshClient("http://localhost:8080/api/v1", $config);

Compatibility

  • Gentics Mesh 1.8.x
  • PHP 8.1+

TODOs

  • Implement full upload support
  • Implement eventbus websocket support

Release

maintenance-0.10.x branch Versioning: 0.10.x - PHP 7.x, Guzzle 6

master branch Versioning: 0.20.x - PHP 8.1+, Guzzle 7

License

Apache License Version 2.0