123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382 |
- {
- "$schema": "http://json-schema.org/draft-06/schema#",
- "title": "JSON:API Schema",
- "description": "This is a schema for responses in the JSON:API format. For more, see http://jsonapi.org",
- "oneOf": [
- {
- "$ref": "#/definitions/success"
- },
- {
- "$ref": "#/definitions/failure"
- },
- {
- "$ref": "#/definitions/info"
- }
- ],
- "definitions": {
- "success": {
- "type": "object",
- "required": [
- "data"
- ],
- "properties": {
- "data": {
- "$ref": "#/definitions/data"
- },
- "included": {
- "description": "To reduce the number of HTTP requests, servers **MAY** allow responses that include related resources along with the requested primary resources. Such responses are called \"compound documents\".",
- "type": "array",
- "items": {
- "$ref": "#/definitions/resource"
- },
- "uniqueItems": true
- },
- "meta": {
- "$ref": "#/definitions/meta"
- },
- "links": {
- "description": "Link members related to the primary data.",
- "allOf": [
- {
- "$ref": "#/definitions/links"
- },
- {
- "$ref": "#/definitions/pagination"
- }
- ]
- },
- "jsonapi": {
- "$ref": "#/definitions/jsonapi"
- }
- },
- "additionalProperties": false
- },
- "failure": {
- "type": "object",
- "required": [
- "errors"
- ],
- "properties": {
- "errors": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/error"
- },
- "uniqueItems": true
- },
- "meta": {
- "$ref": "#/definitions/meta"
- },
- "jsonapi": {
- "$ref": "#/definitions/jsonapi"
- },
- "links": {
- "$ref": "#/definitions/links"
- }
- },
- "additionalProperties": false
- },
- "info": {
- "type": "object",
- "required": [
- "meta"
- ],
- "properties": {
- "meta": {
- "$ref": "#/definitions/meta"
- },
- "links": {
- "$ref": "#/definitions/links"
- },
- "jsonapi": {
- "$ref": "#/definitions/jsonapi"
- }
- },
- "additionalProperties": false
- },
- "meta": {
- "description": "Non-standard meta-information that can not be represented as an attribute or relationship.",
- "type": "object",
- "additionalProperties": true
- },
- "data": {
- "description": "The document's \"primary data\" is a representation of the resource or collection of resources targeted by a request.",
- "oneOf": [
- {
- "$ref": "#/definitions/resource"
- },
- {
- "description": "An array of resource objects, an array of resource identifier objects, or an empty array ([]), for requests that target resource collections.",
- "type": "array",
- "items": {
- "$ref": "#/definitions/resource"
- },
- "uniqueItems": true
- },
- {
- "description": "null if the request is one that might correspond to a single resource, but doesn't currently.",
- "type": "null"
- }
- ]
- },
- "resource": {
- "description": "\"Resource objects\" appear in a JSON:API document to represent resources.",
- "type": "object",
- "required": [
- "type",
- "id"
- ],
- "properties": {
- "type": {
- "type": "string"
- },
- "id": {
- "type": "string"
- },
- "attributes": {
- "$ref": "#/definitions/attributes"
- },
- "relationships": {
- "$ref": "#/definitions/relationships"
- },
- "links": {
- "$ref": "#/definitions/links"
- },
- "meta": {
- "$ref": "#/definitions/meta"
- }
- },
- "additionalProperties": false
- },
- "relationshipLinks": {
- "description": "A resource object **MAY** contain references to other resource objects (\"relationships\"). Relationships may be to-one or to-many. Relationships can be specified by including a member in a resource's links object.",
- "type": "object",
- "properties": {
- "self": {
- "description": "A `self` member, whose value is a URL for the relationship itself (a \"relationship URL\"). This URL allows the client to directly manipulate the relationship. For example, it would allow a client to remove an `author` from an `article` without deleting the people resource itself.",
- "$ref": "#/definitions/link"
- },
- "related": {
- "$ref": "#/definitions/link"
- }
- },
- "additionalProperties": true
- },
- "links": {
- "type": "object",
- "additionalProperties": {
- "$ref": "#/definitions/link"
- }
- },
- "link": {
- "description": "A link **MUST** be represented as either: a string containing the link's URL or a link object.",
- "oneOf": [
- {
- "description": "A string containing the link's URL.",
- "type": "string",
- "format": "uri-reference"
- },
- {
- "type": "object",
- "required": [
- "href"
- ],
- "properties": {
- "href": {
- "description": "A string containing the link's URL.",
- "type": "string",
- "format": "uri-reference"
- },
- "meta": {
- "$ref": "#/definitions/meta"
- }
- }
- }
- ]
- },
- "attributes": {
- "description": "Members of the attributes object (\"attributes\") represent information about the resource object in which it's defined.",
- "type": "object",
- "patternProperties": {
- "^(?!relationships$|links$|id$|type$)\\w[-\\w_]*$": {
- "description": "Attributes may contain any valid JSON value."
- }
- },
- "additionalProperties": false
- },
- "relationships": {
- "description": "Members of the relationships object (\"relationships\") represent references from the resource object in which it's defined to other resource objects.",
- "type": "object",
- "patternProperties": {
- "^(?!id$|type$)\\w[-\\w_]*$": {
- "properties": {
- "links": {
- "$ref": "#/definitions/relationshipLinks"
- },
- "data": {
- "description": "Member, whose value represents \"resource linkage\".",
- "oneOf": [
- {
- "$ref": "#/definitions/relationshipToOne"
- },
- {
- "$ref": "#/definitions/relationshipToMany"
- }
- ]
- },
- "meta": {
- "$ref": "#/definitions/meta"
- }
- },
- "anyOf": [
- {"required": ["data"]},
- {"required": ["meta"]},
- {"required": ["links"]}
- ],
- "additionalProperties": false
- }
- },
- "additionalProperties": false
- },
- "relationshipToOne": {
- "description": "References to other resource objects in a to-one (\"relationship\"). Relationships can be specified by including a member in a resource's links object.",
- "anyOf": [
- {
- "$ref": "#/definitions/empty"
- },
- {
- "$ref": "#/definitions/linkage"
- }
- ]
- },
- "relationshipToMany": {
- "description": "An array of objects each containing \"type\" and \"id\" members for to-many relationships.",
- "type": "array",
- "items": {
- "$ref": "#/definitions/linkage"
- },
- "uniqueItems": true
- },
- "empty": {
- "description": "Describes an empty to-one relationship.",
- "type": "null"
- },
- "linkage": {
- "description": "The \"type\" and \"id\" to non-empty members.",
- "type": "object",
- "required": [
- "type",
- "id"
- ],
- "properties": {
- "type": {
- "type": "string"
- },
- "id": {
- "type": "string"
- },
- "meta": {
- "$ref": "#/definitions/meta"
- }
- },
- "additionalProperties": false
- },
- "pagination": {
- "type": "object",
- "properties": {
- "first": {
- "description": "The first page of data",
- "oneOf": [
- { "$ref": "#/definitions/link" },
- { "type": "null" }
- ]
- },
- "last": {
- "description": "The last page of data",
- "oneOf": [
- { "$ref": "#/definitions/link" },
- { "type": "null" }
- ]
- },
- "prev": {
- "description": "The previous page of data",
- "oneOf": [
- { "$ref": "#/definitions/link" },
- { "type": "null" }
- ]
- },
- "next": {
- "description": "The next page of data",
- "oneOf": [
- { "$ref": "#/definitions/link" },
- { "type": "null" }
- ]
- }
- }
- },
- "jsonapi": {
- "description": "An object describing the server's implementation",
- "type": "object",
- "properties": {
- "version": {
- "type": "string"
- },
- "meta": {
- "$ref": "#/definitions/meta"
- }
- },
- "additionalProperties": false
- },
- "error": {
- "type": "object",
- "properties": {
- "id": {
- "description": "A unique identifier for this particular occurrence of the problem.",
- "type": "string"
- },
- "links": {
- "$ref": "#/definitions/links"
- },
- "status": {
- "description": "The HTTP status code applicable to this problem, expressed as a string value.",
- "type": "string"
- },
- "code": {
- "description": "An application-specific error code, expressed as a string value.",
- "type": "string"
- },
- "title": {
- "description": "A short, human-readable summary of the problem. It **SHOULD NOT** change from occurrence to occurrence of the problem, except for purposes of localization.",
- "type": "string"
- },
- "detail": {
- "description": "A human-readable explanation specific to this occurrence of the problem.",
- "type": "string"
- },
- "source": {
- "type": "object",
- "properties": {
- "pointer": {
- "description": "A JSON Pointer [RFC6901] to the associated entity in the request document [e.g. \"/data\" for a primary data object, or \"/data/attributes/title\" for a specific attribute].",
- "type": "string"
- },
- "parameter": {
- "description": "A string indicating which query parameter caused the error.",
- "type": "string"
- }
- }
- },
- "meta": {
- "$ref": "#/definitions/meta"
- }
- },
- "additionalProperties": false
- }
- }
- }
|