-
Notifications
You must be signed in to change notification settings - Fork 0
/
schema-registry-service.yaml
469 lines (466 loc) · 17 KB
/
schema-registry-service.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
openapi: 3.0.3
info:
title: Schema Registry Service API Draft Specification
version: 0.0.1
description: |
Draft specification for a Schema Registry API. A schema is a standardized, structured representation of an entity, usually written in a standard format such as JSON Schema.
Schemas are registered and accessed within a **namespace** -> **repository** -> **schema** hierarchy, where:
* **namespaces** represent organizations or consortia under which a collection of schemas are published
* **repositories** represent a single conceptual data model with multiple versioned releases
* **schemas** represent a single versioned release of a conceptual model (the repository it belongs to)
license:
name: Apache 2.0
url: https://raw.githubusercontent.com/DNAstack/schema-registry-service-draft-spec/LICENSE
contact:
name: Jeremy Adams
email: jeremy@dnastack.com
tags:
- name: Namespaces API
description: Request information about registered namespaces
externalDocs:
url: https://github.com/dnastack/schema-registry-service-draft-spec
- name: Schemas API
description: Request information about registered schemas
externalDocs:
url: https://github.com/dnastack/schema-registry-service-draft-spec
security:
- bearerAuth: []
paths:
/service-info:
$ref: https://raw.githubusercontent.com/ga4gh-discovery/ga4gh-service-info/v1.0.0/service-info.yaml#/paths/~1service-info
/namespaces:
get:
summary: List namespaces
operationId: listNamespaces
description: List all namespaces
tags:
- Namespaces API
responses:
'200':
description: List of namespaces retrieved successfully
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Namespace'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
default:
$ref: '#/components/responses/Error'
/namespaces/{namespace_id}:
get:
summary: Get Namespace
operationId: getNamespace
description: Get a single namespace by its unique ID
tags:
- Namespaces API
parameters:
- $ref: '#/components/parameters/namespaceId'
responses:
'200':
description: Successfully retrieved namespace with the requested ID
content:
application/json:
schema:
$ref: '#/components/schemas/Namespace'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
default:
$ref: '#/components/responses/Error'
/schemas:
get:
summary: List schema repositories
operationId: listSchemaRepositories
description: List all schema repositories across all namespaces
tags:
- Schemas API
responses:
'200':
description: List of schema repositories retrieved successfully
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/SchemaRepository'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
default:
$ref: '#/components/responses/Error'
/schemas/{namespace_id}/{repository_name}:
get:
summary: Get Schema Repository
operationId: getSchemaRepository
description: Get a single schema repository under the requested namespace and repository name
tags:
- Schemas API
parameters:
- $ref: '#/components/parameters/namespaceId'
- $ref: '#/components/parameters/repositoryName'
responses:
'200':
description: Successfully retrieved schema repository with the requested namespace ID and repository name
content:
application/json:
schema:
$ref: '#/components/schemas/SchemaRepository'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
default:
$ref: '#/components/responses/Error'
/schemas/{namespace_id}/{repository_name}/{version}:
get:
summary: Get Schema
operationId: getSchema
description: Get a single schema under the requested namespace, repository name, and version
tags:
- Schemas API
parameters:
- $ref: '#/components/parameters/namespaceId'
- $ref: '#/components/parameters/repositoryName'
- $ref: '#/components/parameters/version'
responses:
'200':
description: Successfully retrieved schema repository with the requested namespace ID, repository name, and version
content:
application/json:
schema:
$ref: '#/components/schemas/Schema'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
default:
$ref: '#/components/responses/Error'
/schemas/{namespace_id}/{repository_name}/{version}/{format}:
get:
summary: Get raw schema definition
operationId: getRawSchema
description: Get the raw JSON schema definition (in JSON or YAML) for the schema at the requested namespace, repository, and version
tags:
- Schemas API
parameters:
- $ref: '#/components/parameters/namespaceId'
- $ref: '#/components/parameters/repositoryName'
- $ref: '#/components/parameters/version'
- $ref: '#/components/parameters/format'
responses:
'200':
description: Successfully retrieved the raw JSON schema definition for the schema at the requested namespace, repository, and version
content:
application/json:
example: |
{
"$id": "https://registry.schemas.dnastack.com/dnastack/sars-cov-2-voc/1.0.0/json",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SARS-CoV-2 VoC",
"type": "object",
"properties": {
"variant_name": {
"type": "string",
"description": "Variant official name",
"example": "omicron"
},
"detected_date": {
"type": "string",
"description": "timestamp indicating date of first detection in YYYY-mm-dd format",
"example": "2022-11-19"
}
},
"required": [
"variant_name",
"detected_date"
]
}
text/vnd.yaml:
example: |
$id: "https://registry.schemas.dnastack.com/dnastack/sars-cov-2-voc/1.0.0/yaml"
$schema: "https://json-schema.org/draft/2020-12/schema"
title: SARS-CoV-2 VoC
type: object
properties:
variant_name:
type: string
description: Variant official name
example: omicron
detected_date:
type: string
description: timestamp indicating date of first detection in YYYY-mm-dd format
example: '2022-11-19'
required:
- variant_name
- detected_date
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
default:
$ref: '#/components/responses/Error'
components:
parameters:
namespaceId:
name: namespace_id
in: path
required: true
description: Namespace ID
schema:
type: string
repositoryName:
name: repository_name
in: path
required: true
description: Name of the schema repository
schema:
type: string
version:
name: version
in: path
required: true
description: Version number of the released schema
schema:
type: string
format:
name: format
in: path
required: true
description: File format of the requested schema
schema:
type: string
enum:
- json
- yaml
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
responses:
BadRequest:
description: 'HTTP Bad Request ([RFC 7231 Section 6.5.1](https://tools.ietf.org/html/rfc7231#section-6.5.1))'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: 'Unauthorized ([RFC 7235](https://tools.ietf.org/html/rfc7235))'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Forbidden:
description: 'Forbidden ([RFC 7231](https://tools.ietf.org/html/rfc7231))'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: 'Not found ([RFC 7231](https://tools.ietf.org/html/rfc7231))'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
InternalServerError:
description: 'Internal server error ([RFC 7231](https://tools.ietf.org/html/rfc7231))'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Error:
description: 'Unexpected error ([RFC 7231](https://tools.ietf.org/html/rfc7231))'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Namespace:
type: object
description: Organizational unit containing a collection of schemas. A namespace typically pertains to an organization, but can also be used to represent an individual user/researcher or a consortium.
required:
- namespace_id
- full_name
- description
- url
properties:
namespace_id:
type: string
description: Unique identifier for the namespace
example: dnastack
short_name:
type: string
description: Acronym, initialism, or otherwise shortened version of organization's name
full_name:
type: string
description: Full name of the organization or body behind the namespace
example: DNAstack
description:
type: string
description: Short description of the organization or body that created the namespace, such as company profile
example: Our software connects a global community of precision medicine initiatives, research consortiums, patient advocacy groups, hospitals, startups, funders, pharma companies, and governments to accelerate collaborative discoveries in genomics and health.
url:
type: string
description: Homepage or documentation URL of the organization or body
example: https://dnastack.com
schema_repositories:
type: array
description: List of schema repositories maintained by the organization within the namespace
items:
$ref: "#/components/schemas/SchemaRepository"
tags:
$ref: "#/components/schemas/Tags"
SchemaRepository:
type: object
description: Represents a repository for a single conceptual data model or schema. A single Schema Repository entity is considered a repository as it can hold multiple revisions/versions of the same conceptual entity
required:
- namespace_id
- repository_name
- description
properties:
namespace_id:
type: string
description: Namespace ID of the namespace that this schema repository belongs to
example: dnastack
repository_name:
type: string
description: Name of the schema repostory. Must be unique within the namespace
example: sars-cov-2-voc
description:
type: string
description: Short description of the model and what it is supposed to represent
example: A SARS-CoV-2 variant of concern
schemas:
type: array
description: List of released versions/revisions of the schema
items:
$ref: "#/components/schemas/Schema"
authors:
type: array
description: List of individual or group authors that developed the schema
items:
$ref: "#/components/schemas/Author"
tags:
$ref: "#/components/schemas/Tags"
Schema:
type: object
description: A versioned release of the conceptual model as a schema. Schema is written in JSON schema (JSON and/or YAML representation)
required:
- namespace_id
- repository_name
- version
- changelog
- formats
properties:
namespace_id:
type: string
description: Namespace ID of the namespace that this schema belongs to
example: dnastack
repository_name:
type: string
description: Name of the schema repository that this schema belongs to
example: sars-cov-2-voc
version:
type: string
description: Version number of the release
example: 1.0.0
changelog:
type: array
items:
type: string
description: High-level list of changes made in this release compared to the previous version
example:
- Added field 'variant_name'
- Added field 'detected_date'
formats:
type: array
items:
type: string
enum:
- json
- yaml
description: |
The file format(s) that the schema is represented in.
**Allowed Values:**
* `json` - schema is available in JSON schema (JSON format)
* `yaml` - schema is available in JSON schema (YAML format)
example:
- json
- yaml
Author:
type: object
description: An individual or group who created, maintained, or otherwise contributed to a schema
required:
- name
properties:
name:
type: string
description: Name of contributing individual or group
example: DNAstack developers
url:
type: string
description: Homepage or documentation URL of the contributing individual or group
example: https://dnastack.com
Tags:
type: object
description: Key-Value metadata tags for a namespace or schema. Enables simple search and filtering. A tag can be key only (i.e. value left blank) if the presence of a tag is sufficient.
example:
disease: COVID-19
COVID-19: ""
Error:
type: object
required:
- status
- title
properties:
status:
type: integer
format: int32
description: |
HTTP status code (as per [RFC 7231](https://tools.ietf.org/html/rfc7231)) generated by the server for this occurrence of the problem.
This must match the status code in the actual HTTP response. Used for convenience of clients (e.g. to determine what the original status code was in cases where it has been changed by an intermediary or cache or when message bodies persist without HTTP information).
example: '500'
title:
type: string
description: |
A short, human-readable description of the error.
The value should not change from occurrence to occurrence of an error, except for purposes of localization.
example: 'Internal server error'
message:
type: string
description: 'A human-readable explanation specific to this occurrence of the error.'
example: 'Internal server error'