<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
mateusjunges / confluent-schema-registry-api example snippets
use GuzzleHttp\Client;
use FlixTech\SchemaRegistryApi\Registry\PromisingRegistry;
use FlixTech\SchemaRegistryApi\Exception\SchemaRegistryException;
$registry = new PromisingRegistry(
new Client(['base_uri' => 'registry.example.com'])
);
// Register a schema with a subject
$schema = AvroSchema::parse('{"type": "string"}');
// The promise will either contain a schema id as int when fulfilled,
// or a SchemaRegistryException instance when rejected.
// If the subject does not exist, it will be created implicitly
$promise = $registry->register('test-subject', $schema);
// If you want to resolve the promise, you might either get the value or an instance of a SchemaRegistryException
// It is more like an Either Monad, since returning Exceptions from rejection callbacks will throw them.
// We want to leave that decision to the user of the lib.
// TODO: Maybe return an Either Monad instead
$promise = $promise->then(
static function ($schemaIdOrSchemaRegistryException) {
if ($schemaIdOrSchemaRegistryException instanceof SchemaRegistryException) {
throw $schemaIdOrSchemaRegistryException;
}
return $schemaIdOrSchemaRegistryException;
}
);
// Resolve the promise
$schemaId = $promise->wait();
// Get a schema by schema id
$promise = $registry->schemaForId($schemaId);
// As above you could add additional callbacks to the promise
$schema = $promise->wait();
// Get the version of a schema for a given subject.
$version = $registry->schemaVersion(
'test-subject',
$schema
)->wait();
// You can also get a schema by subject and version
$schema = $registry->schemaForSubjectAndVersion('test-subject', $version)->wait();
// You can additionally just query for the currently latest schema within a subject.
// *NOTE*: Once you requested this it might not be the latest version anymore.
$latestSchema = $registry->latestVersion('test-subject')->wait();
// Sometimes you want to find out the global schema id for a given schema
$schemaId = $registry->schemaId('test-subject', $schema)->wait();
use FlixTech\SchemaRegistryApi\Registry\BlockingRegistry;
use FlixTech\SchemaRegistryApi\Registry\PromisingRegistry;
use GuzzleHttp\Client;
$registry = new BlockingRegistry(
new PromisingRegistry(
new Client(['base_uri' => 'registry.example.com'])
)
);
// What the blocking registry does is actually resolving the promises
// with `wait` and adding a throwing rejection callback.
$schema = AvroSchema::parse('{"type": "string"}');
// This will be an int, and not a promise
$schemaId = $registry->register('test-subject', $schema);
use FlixTech\SchemaRegistryApi\Registry\BlockingRegistry;
use FlixTech\SchemaRegistryApi\Registry\PromisingRegistry;
use FlixTech\SchemaRegistryApi\Registry\CachedRegistry;
use FlixTech\SchemaRegistryApi\Registry\Cache\AvroObjectCacheAdapter;
use FlixTech\SchemaRegistryApi\Registry\Cache\DoctrineCacheAdapter;
use Doctrine\Common\Cache\ArrayCache;
use GuzzleHttp\Client;
$asyncApi = new PromisingRegistry(
new Client(['base_uri' => 'registry.example.com'])
);
$syncApi = new BlockingRegistry($asyncApi);
$doctrineCachedSyncApi = new CachedRegistry(
$asyncApi,
new DoctrineCacheAdapter(
new ArrayCache()
)
);
// All adapters support both APIs, for async APIs additional fulfillment callbacks will be registered.
$avroObjectCachedAsyncApi = new CachedRegistry(
$syncApi,
new AvroObjectCacheAdapter()
);
// NEW in version 4.x, passing in custom hash functions to cache schema ids via the schema hash
// By default the following function is used internally
$defaultHashFunction = static function (AvroSchema $schema) {
return md5((string) $schema);
};
// You can also define your own hash callable
$sha1HashFunction = static function (AvroSchema $schema) {
return sha1((string) $schema);
};
// Pass the hash function as optional 3rd parameter to the CachedRegistry constructor
$avroObjectCachedAsyncApi = new CachedRegistry(
$syncApi,
new AvroObjectCacheAdapter(),
$sha1HashFunction
);
bash
PHP_VERSION=7.3 XDEBUG_VERSION=2.9.8 make docker
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.