Skip to content

Commit 8ffb706

Browse files
authored
Merge branch '3.2' into greggish-patch-1
2 parents 3dbd48f + 67bb215 commit 8ffb706

10 files changed

Lines changed: 276 additions & 8 deletions

File tree

docs/about/credits.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ Credits
33

44
The Open Referral Initiative is led by Greg Bloom ([@greggish](https://github.com/greggish)). Its launch in 2014 was co-sponsored by [Code for America](http://codeforamerica.org), with funding from [the Knight Foundation](https://knightfoundation.org).
55

6+
Project documentation for Open Referral, along with open source collateral work materials, can be accessed in ([this public file folder](https://drive.google.com/drive/folders/0B-5CZ4ZLjTHqfk12WTFUbVk1NjBYMjRaZTlZRlN1UjhWMS1MN0tLV3Q4ejY3TWpOYWwwVDg?resourcekey=0-V8QRlJu4Jlrw40yN1U_TKQ&usp=sharing)).
7+
68
The Human Services Data Specification is developed under the technical stewardship of [the Open Data Services Cooperative](http://opendataservices.coop/) (read more [here](https://openreferral.org/meet-the-open-data-services-cooperative/)).
79

810
Open Referral's [Explainer Video](https://www.youtube.com/watch?v=yHsIZhACSVc) was made possible by a small grant from [the Shuttleworth Foundation](http://shuttleworthfoundation.org/).

docs/about/specification-governance.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,6 @@ The committee consists of people with a track record of contributing input to th
3535

3636
The committee also can advise Open Referral’s Lead Organizer on issues related to the Open Referral community at large, and can make recommendations as to investments in development of tools and other tech that can support adoption and use of HSDS.
3737

38-
#### As of Spring 2024, the Open Referral Technical Committee is in formation
39-
40-
Upon formation of this body, the body will manage itself – beginning by writing a charter that establishes: how people are added/removed, how decisions will be made, how the body can be dissolved, etc. This can be authored by the founding members and reviewed by the technical steward, and must be approved by the lead organizer and fiscal sponsor. 
41-
4238
### The process for requesting changes to HSDS is open to anyone.
4339

4440
Input on Open Referral's specifications and materials can be shared through several channels: our [Github queue](https://github.com/openreferral/specification/issues), our [Community Forum](https://forum.openreferral.org/), and occasional community Assemblies. The Technical Steward is responsible for receiving and synthesizing such input from across channels for review by the Technical Committee. The Technical Committee members are empowered to propose specific changes to the specifications; proposed changes that are met with rough consensus (i.e. most support and nobody objects) are acknowledged in the Forum advanced to the Technical Steward for codification. Upon receiving all outputs from the Technical Committee, the Technical Steward develops a fully specified proposal for a version upgrade, which is shared with the community for a Request for Comment period (usually of about two weeks). The Technical Steward receives any additional input through this period, and can call for additional meetings of the Technical Committee to seek consensus on additional changes as necessary.

docs/extras/openapi30.json

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,33 @@
99
"url": "https://creativecommons.org/licenses/by/4.0/"
1010
}
1111
},
12+
"tags": [
13+
{
14+
"name": "required",
15+
"description": "This endpoint is REQUIRED by the HSDS API Specification",
16+
"externalDocs": {
17+
"description": "This URI points to the codelist file used to define the codes in HSDS which are then used to define this tag. The OpenAPI Tag objects are used to implement the codelist, whereas the canonical definition is in the codelist. If there are any discrepancies between the description of this OpenAPI Tag and the codelist, the codelist takes priority.",
18+
"url": "https://docs.openreferral.org/en/latest/hsds/codelists.html#api-endpoint-requirement"
19+
}
20+
},
21+
{
22+
"name": "optional",
23+
"description": "This endpoint is OPTIONAL in the HSDS API Specification",
24+
"externalDocs": {
25+
"description": "This URI points to the codelist file used to define the codes in HSDS which are then used to define this tag. The OpenAPI Tag objects are used to implement the codelist, whereas the canonical definition is in the codelist. If there are any discrepancies between the description of this OpenAPI Tag and the codelist, the codelist takes priority.",
26+
"url": "https://docs.openreferral.org/en/latest/hsds/codelists.html#api-endpoint-requirement"
27+
}
28+
}
29+
],
1230
"paths": {
1331
"/": {
1432
"get": {
1533
"description": "Retrieve information about this API and its relationship with HSDS.",
1634
"summary": "Retrieve information about this API and its relationship with HSDS.",
1735
"operationId": "getAPIMetaInformation",
36+
"tags": [
37+
"required"
38+
],
1839
"responses": {
1940
"200": {
2041
"description": "A JSON response providing information about this API.",
@@ -36,6 +57,46 @@
3657
"type": "string",
3758
"format": "uri",
3859
"description": "URL of the openapi JSON file which defines this API."
60+
},
61+
"description": {
62+
"type": "string",
63+
"description": "A human-readable description of this API feed"
64+
},
65+
"data_guide": {
66+
"type": "string",
67+
"format": "uri",
68+
"description": "A URI to a human-readable data guide which can support people understanding this dataset."
69+
},
70+
"publisher": {
71+
"type": "object",
72+
"properties": {
73+
"name": {
74+
"type": "string",
75+
"description": "The name of the publisher of this API feed."
76+
},
77+
"identifier": {
78+
"type": "string",
79+
"description": "An organization identifier string formatted according to org-id.guide e.g. GB-COH-123456."
80+
},
81+
"email": {
82+
"type": "string",
83+
"format": "email",
84+
"description": "An email address that can be used to submit feedback about data in this feed."
85+
},
86+
"website": {
87+
"type": "string",
88+
"format": "uri",
89+
"description": "A URL that can be used to submit feedback about data in this feed."
90+
},
91+
"additional_websites": {
92+
"type": "array",
93+
"description": "Additional URLs that can be used to contact the Publisher about data in this feed.",
94+
"items": {
95+
"type": "string",
96+
"format": "uri"
97+
}
98+
}
99+
}
39100
}
40101
}
41102
}
@@ -61,6 +122,9 @@
61122
"description": "Retrieve fully nested service with all related data with id.",
62123
"summary": "Retrieves a fully nested service with all related data with id.",
63124
"operationId": "getFullyNestedServiceById",
125+
"tags": [
126+
"required"
127+
],
64128
"responses": {
65129
"200": {
66130
"description": "A Service matching the {id}, with all related data according to the HSDS Specification for Service.",
@@ -80,6 +144,9 @@
80144
"description": "Retrieve fully nested service with all related data with id.",
81145
"summary": "Retrieves paginated listings of services that only have one-to-one fields in them.",
82146
"operationId": "getPaginatedListOfServices",
147+
"tags": [
148+
"required"
149+
],
83150
"parameters": [
84151
{
85152
"$ref": "#/components/parameters/search"
@@ -143,6 +210,9 @@
143210
"description": "Retrieve fully nested service with all related data with id.",
144211
"summary": "Retrieves paginated listings of services that only have one-to-one fields in them.",
145212
"operationId": "getPaginatedListOfServices",
213+
"tags": [
214+
"optional"
215+
],
146216
"parameters": [
147217
{
148218
"$ref": "#/components/parameters/search"
@@ -219,6 +289,9 @@
219289
"description": "Full information on taxonomy.",
220290
"summary": "Retrieves full information on a taxonomy by {id}.",
221291
"operationId": "getTaxonomyById",
292+
"tags": [
293+
"optional"
294+
],
222295
"responses": {
223296
"200": {
224297
"description": "Full information on taxonomy.",
@@ -238,6 +311,9 @@
238311
"description": "Paginated listing of taxonomies.",
239312
"summary": "Paginated listing of taxonomies.",
240313
"operationId": "getPaginatedListOfTaxonomies",
314+
"tags": [
315+
"optional"
316+
],
241317
"parameters": [
242318
{
243319
"$ref": "#/components/parameters/search"
@@ -281,6 +357,9 @@
281357
"description": "Paginated listing of taxonomies.",
282358
"summary": "Paginated listing of taxonomies.",
283359
"operationId": "getPaginatedListOfTaxonomies",
360+
"tags": [
361+
"optional"
362+
],
284363
"parameters": [
285364
{
286365
"$ref": "#/components/parameters/search"
@@ -337,6 +416,9 @@
337416
"description": "Full information on a taxonomy term.",
338417
"summary": "Full information on a taxonomy term.",
339418
"operationId": "getPaginatedListOfTaxonomyTerms",
419+
"tags": [
420+
"optional"
421+
],
340422
"responses": {
341423
"200": {
342424
"description": "Full information on a taxonomy term.",
@@ -356,6 +438,9 @@
356438
"description": "Full information on a taxonomy term",
357439
"summary": "Paginated listing of taxonomy terms",
358440
"operationId": "getTaxonomyTermById",
441+
"tags": [
442+
"optional"
443+
],
359444
"parameters": [
360445
{
361446
"$ref": "#/components/parameters/search"
@@ -420,6 +505,9 @@
420505
"description": "Full information on a taxonomy term",
421506
"summary": "Paginated listing of taxonomy terms",
422507
"operationId": "getTaxonomyTermById",
508+
"tags": [
509+
"optional"
510+
],
423511
"parameters": [
424512
{
425513
"$ref": "#/components/parameters/search"
@@ -497,6 +585,9 @@
497585
"description": "Fully nested organization with service array that contains simple information which could only contain the service.id.",
498586
"summary": "Fully nested organization with service array that contains simple information which could only contain the service.id.",
499587
"operationId": "getOrganizationById",
588+
"tags": [
589+
"optional"
590+
],
500591
"parameters": [
501592
{
502593
"$ref": "#/components/parameters/full_service"
@@ -521,6 +612,9 @@
521612
"description": "Paginated list of basic Organization information.",
522613
"summary": "Paginated list of basic Organization information",
523614
"operationId": "getPaginatedListOfOrganizations",
615+
"tags": [
616+
"optional"
617+
],
524618
"parameters": [
525619
{
526620
"$ref": "#/components/parameters/search"
@@ -577,6 +671,9 @@
577671
"description": "Paginated list of basic Organization information.",
578672
"summary": "Paginated list of basic Organization information",
579673
"operationId": "getPaginatedListOfOrganizations",
674+
"tags": [
675+
"optional"
676+
],
580677
"parameters": [
581678
{
582679
"$ref": "#/components/parameters/search"
@@ -646,6 +743,9 @@
646743
"description": "Retrieve fully nested service_at_location with all related data with specified id.",
647744
"summary": "Retrieve fully nested service_at_location with all related data with specified id.",
648745
"operationId": "getServiceAtLocationWithNestedDataById",
746+
"tags": [
747+
"optional"
748+
],
649749
"responses": {
650750
"200": {
651751
"description": "Retrieve fully nested service_at_location with all related data with specified id.",
@@ -665,6 +765,9 @@
665765
"description": "Retrieve paginated listings of service_at_location that only have one-to-one fields in them.",
666766
"summary": "Retrieve paginated listings of service_at_location that only have one-to-one fields in them.",
667767
"operationId": "getPaginatedListOfServiceAtLocation",
768+
"tags": [
769+
"optional"
770+
],
668771
"parameters": [
669772
{
670773
"$ref": "#/components/parameters/search"
@@ -730,6 +833,9 @@
730833
"description": "Retrieve paginated listings of service_at_location that only have one-to-one fields in them.",
731834
"summary": "Retrieve paginated listings of service_at_location that only have one-to-one fields in them.",
732835
"operationId": "getPaginatedListOfServiceAtLocation",
836+
"tags": [
837+
"optional"
838+
],
733839
"parameters": [
734840
{
735841
"$ref": "#/components/parameters/search"

docs/hsds/api_reference.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,16 @@ Unlike with the HSDS Schemas where we can provide canonical JSON Schema represen
77

88
To overcome this limitation, the API specification on this page uses the key words "MUST", "REQUIRED" and "OPTIONAL" in accordance with [RFC 2119](https://datatracker.ietf.org/doc/html/rfc2119) to describe whether each endpoint is required by the API Specification. This is used alongside the details of the canonical OpenAPI formatted reference file to measure compliance with the API Specification.
99

10-
The current canonical HSDS API specification in OpenAPI 3.1 format is available at the following URL: [https://raw.githubusercontent.com/openreferral/specification/3.0/schema/openapi.json](https://raw.githubusercontent.com/openreferral/specification/3.0/schema/openapi.json)
10+
The current canonical HSDS API specification in OpenAPI 3.1 format is available at the following URL: [https://raw.githubusercontent.com/openreferral/specification/3.2/schema/openapi.json](https://raw.githubusercontent.com/openreferral/specification/3.2/schema/openapi.json)
1111

1212
For those more familiar with tools such as SwaggerUI, we provide [a Swagger UI representation](../extras/openapi.html). Readers should note that due to incompatibilities between Swagger UI and OpenAPI 3.1, the file powering the Swagger UI representation is compiled from the canonical HSDS API specification file. Therefore if there are any conflicts between the Swagger UI representation and the specification defined on this API Reference page, then *this specification takes precedence*.
1313

1414
If there are errors or omissions in this API specification, you are encouraged to raise issues on [on the issue tracker](https://github.com/openreferral/specification/issues).
1515

16+
## OpenAPI Tags
17+
18+
The OpenAPI specification makes use of OpenAPI's [Tag object](https://spec.openapis.org/oas/latest.html#tag-object) to tad endpoints with tags drawn from the [API Endpoint Requirement codelist](./codelists.md#api-endpoint-requirement). For convenience, these codes and definitions have been reproduced in the OpenAPI file as `Tag`s. If there are any discrepencies between the definitions of these terms between the canonical codelists and the corresponding `Tag` objects in the OpenAPI file; **the canonical codelists take precedence**.
19+
1620
## Lists and Pagination
1721

1822
API endpoints that return lists of entities, such as services returned by a `/services` endpoint MUST be paginated. To support this, the HSDS API reference defines the `Page` schema:

docs/hsds/changelog.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,36 @@ Changelog
33

44
This page provides the list of changes that have been made to the HSDS schema.
55

6+
## [v3.2](https://github.com/openreferral/specification/releases/tag/v3.2)
7+
8+
### New codelists
9+
10+
* Added the [API Endpoint Requirement codelist](https://docs.openreferral.org/en/latest/codelists.html#api-endpoint-requirement)
11+
12+
### Backwards compatible API changes
13+
14+
* New optional `publisher` property on the response schema to `GET /`
15+
* New optional `data_guide` property on the response schema to `GET /`
16+
* New `Tag` objects defined in the canonical openapi.json file, which match codes defined in the new API Endpoint Requirement codelist: `required` and `optional`
17+
* Applied `required` tag to the following endpoints:
18+
* `GET /`
19+
* `GET /services/{id}`
20+
* `GET /services`
21+
* Applied `optional` tag to the following endpoints:
22+
* `GET /taxonomies/{id}`
23+
* `GET /taxonomies`
24+
* `GET /taxonomy_terms/{id}`
25+
* `GET /taxonomy_terms`
26+
* `GET /organizations/{id}`
27+
* `GET /organizations`
28+
* `GET /service_at_locations/{id}`
29+
* `GET /service_at_locations`
30+
* `POST /services`
31+
* `POST /taxonomies`
32+
* `POST /taxonomy_terms`
33+
* `POST /organizations`
34+
* `POST /service_at_locations`
35+
636
## [v3.1.1](https://github.com/openreferral/specification/releases/tag/v3.1.1)
737

838
* Made `Page.Empty` a required field for API responses

docs/hsds/codelists.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
Codelists Reference
2+
=====================
3+
4+
Some schema and API References fields refer to codelists which help interoperability by standardizing and limiting the possible values of fields.
5+
6+
At this moment in time, the Human Services Data Specification only uses a single codelist: the API Required codelist.
7+
8+
## API Endpoint Requirement
9+
This is used to define codes which are then implemented by the OpenAPI file — representing the [API Reference](api_reference.md) — as `Tag` objects and then used to tag particular operations defined in the file as required by the specification or not.
10+
11+
This codelist is the result of a knowledge exchange with [CommonGrants](https://commongrants.org/), who implement a similar system to overcome the challenge of using OpenAPI to encode an API Reference.
12+
13+
```{eval-rst}
14+
.. csv-table::
15+
:file: ../../schema/codelists/api-endpoint-requirement.csv
16+
:header-rows: 1
17+
:widths: auto
18+
```

docs/hsds/database_schemas.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ HSDS is an exchange format designed to standardise the format for outputting mac
99

1010
This being established, we provide some pre-rolled database schemas in order to support people and organizations bootstrapping systems which will work with HSDS data. We provide these in the form of `.sql` query files which — when executed in an appropriate environment — will generate database schemas with tables useful for storing and retrieving HSDS data. We geneate these files directly from the HSDS schema files, so they update as we release new versions of the specification.
1111

12-
You can find the latest version of these files in the `/database` directory of the HSDS Specification Github repository. We provide versions for each SQL and PostgreSQL format databases. The files for HSDS version 3.1 are linked below:
12+
You can find the latest version of these files in the `/database` directory of the HSDS Specification Github repository. We provide versions for each SQL and PostgreSQL format databases. The files for HSDS version 3.2 are linked below:
1313

14-
* [Database schemas for HSDS 3.1](https://github.com/openreferral/specification/tree/3.1/database)
14+
* [Database schemas for HSDS 3.1](https://github.com/openreferral/specification/tree/3.2/database)

docs/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ Contents:
5858
5959
hsds/overview
6060
hsds/schema_reference
61+
hsds/codelists
6162
hsds/api_reference
6263
hsds/serialization
6364
hsds/identifiers
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Code,Title,Description
2+
"required","Required","This endpoint is REQUIRED by the HSDS API Specification"
3+
"optional","Optional","This endpoint is OPTIONAL in the HSDS API Specification"

0 commit comments

Comments
 (0)