@ovotech/schema-registry-api

v1.0.6
A simple typescript node-fetch wrapper on the confluent schema-registry api

Schema Registry API

A simple typescript node-fetch wrapper on the confluent schema-registry api.

This allows calling the api in a promise-based type-safe manner.

Using

yarn add @ovotech/schema-registry-api
import { Schema } from 'avsc';
const schema: Schema = {
  type: 'record',
  name: 'TestSchema',
  fields: [{ name: 'accountId', type: 'string' }],
};

const subjects = await getSubjects(schemaRegistryUrl);
const newVersion = await addSubjectVersion(schemaRegistryUrl, 'clients', schema);
const foundSchema = await getSchema(schemaRegistryUrl, newVersion.id);

The api rest endpoint are directly translated into functions calling node-fetch:

Function Rest Docs
getSchema(baseUrl: string, id: number) GET /schemas/ids/:id
getSubjects(baseUrl: string) GET /subjects
getSubjectVersions(baseUrl: string, subject: string) GET /subjects/:subject/versions
deleteSubject(baseUrl: string, subject: string) DELETE /subjects/:subject
getSubjectVersionSchema(baseUrl: string, subject: string, version: number) GET /subjects/:subject/versions/:version/schema
addSubjectVersion(baseUrl: string, subject: string, schema: Schema) POST /subjects/:subject/versions
checkSubjectRegistered(baseUrl: string, subject: string, schema: Schema) POST /subjects/:subject
deleteSubjectVersion(baseUrl: string, subject: string, version: number) DELETE /subjects/:subject/versions/:version
`checkCompatibility( baseUrl: string, subject: string, version: number 'latest', schema: Schema)`

But there are also to slightly higher level functions:

idToSchema(baseUrl: string, id: number) - return a schema as a parsed Schema object from a schema id. schemaToId(baseUrl: string, subject: string, schema: Schema) - return the id of a schema object. This will check for an existence of a schema within the given subject, and create a schema version if one was not found.

Running the tests

The tests require a running schema registry service, and we're using docker compose to start it, alongside kafka and zookeeper, required by the service.

So in the project's parent directory run:

docker-compose up

Then you can run the tests with:

yarn test

Coding style (linting, etc) tests

Style is maintained with prettier and tslint

yarn lint

Deployment

Deployment is preferment by lerna automatically on merge / push to master, but you'll need to bump the package version numbers yourself. Only updated packages with newer versions will be pushed to the npm registry.

Contributing

Have a bug? File an issue with a simple example that reproduces this so we can take a look & confirm.

Want to make a change? Submit a PR, explain why it's useful, and make sure you've updated the docs (this file) and the tests (see test folder).

License

This project is licensed under Apache 2 - see the LICENSE file for details

npm i @ovotech/[email protected]

Metadata

Downloads

Maintainers

ablagodyr, adryanovo, agaovo, ailwyn, ainsleybc, amelia.ovo, andrewjtn, annedroiid, apjm, arthas168, asalvadore, benaud12, bm1729, boost-smile, caoilteovo, chris.collier.kaluza, chris.smith, clarencedglee, connelldave, csherwin, david.chellapah.ovo, david.ovo, dimitarg, dopperman, eddiec86, elbird, emilyrigby, ericaovo, esemesek, fei-liao, fgkramer, filose, floroz, freddybushboy, g-tibbs, gmbovo, grug, harrisonbaxter, henrymoultonovo, henrywoodsend, hersheyovo, hike-zzz, homemoves, ievgen-paliichuk-ovo, ikerin, inlustra, jamesbaum, jamesgregoryovo, jelaxshan, joelthornhill, joepurnell-ovo, joewhittles, jonevans4, juliabutterly, jvmovo, kansu, kelveden, kenneth-gray, kevin-ovo, kevrowe, kieran.allen, kittsville, kupxc, laurieboyes, lcatallo, lewright, marcesquerra, marcusgriff, marcuskielly, mariia.marchenkova, marina-ovo, mbayoumy, mhipszki, mikemchugh, mkohlmyr, mmarkusik, molbalazs, mosypov-ovo, mrkiplin, msinton, mwidurek, nazar.hrytsuniak, nazarii.dmytrakh, nicolasov, nishanthsinghgurung, odunka, oli-boyle, orex-team, orion-migration-team, ovo-devices, ovo-engagement, ovo-oot-bot, ovo.cms.devs, ovocms, ovoenergyapps, ovoiinkov, ovotech-boost, ovotech-identity, ovotech-live, ovotech-payg, ovotech-paym, ovotech-payments, ovotech-qs, ovotech-sg, ovotech-sme-team, paceteamkaluza, pan-pawel, pdpi_ovo, pedoublety, pedro.caldeira, peterwilkins, petro.pavlenko, philip-ovo, potsec, props, puzzledbytheweb, radek_tomasek, richardjonesovo, ritagb, robert-g-j, rom1hr, rosario-ovo, samjacobclift, sampennington64, samwest, sarahbeharry, sarahlikeshiny, saumyasarpal, sblausten, shaddeen, shnist, simonmclean-ovo, sketchingdev, smart-heat-prod, smart-heat-uat, sophiefield, sophiepoole, sophiesillmanovo, stuharv-ovo, takac, taras_tymovskyi, tarlingovo, taurelius-ovo, tech.international, teodora.danciu, tokict, tom-g-dane, tomjeatt, tomshawovo, tomverran-ovo, tozzy, trensik, troyb95, tudor-harries, ursularodgers, vslepkan, vytautas.vargonas, yesdaveovo,