diff --git a/api-ref/src/docbkx/api-ref-image.xml b/api-ref/src/docbkx/api-ref-image.xml index 4d6626286..14fd3598a 100644 --- a/api-ref/src/docbkx/api-ref-image.xml +++ b/api-ref/src/docbkx/api-ref-image.xml @@ -44,14 +44,15 @@ Reference.   --> - - Image Service API 2.0 - Creates, updates, and deletes image metadata records. Also, - uploads and downloads raw image data. + + Image Service API v2 + Creates, updates, and deletes image metadata records. Enables + users to share images with each other. Also, uploads and downloads + raw image data. - diff --git a/api-ref/src/wadls/image-api/src/v2/os-image-2.2.wadl b/api-ref/src/wadls/image-api/src/v2/os-image-2.2.wadl new file mode 100644 index 000000000..c6a34e770 --- /dev/null +++ b/api-ref/src/wadls/image-api/src/v2/os-image-2.2.wadl @@ -0,0 +1,559 @@ + + + + + + + + + + + +%common;]> + + + + + + + + + + + + + + + + + + +

Image ID stored through the image API. + Typically a UUID.

+
+ + + + + + + + + + + + +

Image tag.

+
+ + + +
+
+ + + + + +

Image member ID, i.e., the tenant ID + of the user with whom the image is + being shared.

+
+ + + +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + Creates a virtual machine (VM) image. + + Since: Images 2.0 + + + + + +

Name for the image. The name of an image is + not unique to a Glance node. The API + cannot expect users to know the names of + images owned by others.

+
+ + + +

The image ID.

+ +
+ + + +

Image visibility. Public or private. + Default is public.

+ +
+ + + +

Image tags.

+
+ + + + +
+
+ + + Successful HTTP response is 201. + Created with a Location header that contains the + newly-created URI for the image. Response body + represents the created image entity. + + + +

The location for the image identified by a + URI.

+
+ + +
+
+
+ + + Updates a specified image. + Request body must conform to one of the following + media types: + + + + application/openstack-images-v2.0-json-patch + + + + + application/openstack-images-v2.1-json-patch + + + + + You can also use the PATCH method to add or remove + image properties. + For information about the PATCH method and the available + media types, see Appendix B: HTTP PATCH media types + in the OpenStack Image Service API v2 Reference. + + Since: Images 2.0 + + + + + + + + + + + + + + + + + + + + Gets details for a specified image. + Response body is a single image entity. + Since: Images 2.0 + + + + + + + + + + + + Lists public virtual machine (VM) + images. + This call returns a subset of the larger collection + of images and a link that you can use to get the next + set of images. You should always check for the + presence of a 'next' link and use it as the URI in a + subsequent HTTP GET request. You should follow this + pattern until a 'next' link is no longer provided. The + next link preserves any query parameters that you send + in your initial request. You can use the 'first' link + to jump back to the first page of the collection. If + you prefer to paginate through images manually, use + the limit and marker parameters. + The list operation accepts several types of query + parameters that let you filter the results of the + returned collection. + A client can provide direct comparison filters using + most image attributes, such as name=Ubuntu, + visibility=public, and so on. A client cannot filter + on tags or anything defined as a 'link' in the + json-schema, such as self, file, or schema. + You can use the 'size_min' and 'size_max' query + parameters to perform greater-than and less-than + filtering of images based on their 'size' attribute. + The size is measured in bytes and refers to the size + of an image when it is stored on disk. + For example, sending a size_min filter of 1048576 + and size_max of 4194304 filters the container to + include only images that are between 1 and 4 MBs in + size. + You can sort the results of this operation by using + the 'sort_key' and 'sort_dir' parameters. The API uses + the natural sorting of whatever image attribute is + provided as the 'sort_key'. + Since: Images 2.0 + + + + + Use to request a specific page size. Expect + a response to a limited request to return + between zero and limit items. The typical + pattern of limit and marker is to make an + initial limited request and then to use the ID + of the last image from the response as the + marker parameter in a subsequent limited + request. + + + + + Specifies the ID of the last-seen image. The + typical pattern of limit and marker is to make + an initial limited request and then to use the + ID of the last image from the response as the + marker parameter in a subsequent limited + request. + + + + + Filter parameter. Name of the image as a + string. + + + + + Filter parameter. Image visibility. Valid + values are 'public', 'private', 'shared'. + Default is public + private + shared images + with 'accepted' member status. + + + + + + Filter parameter. Only show images with + the specified member status. Valid values + are 'accepted', 'pending', 'rejected', 'all'. + Default is 'accepted'. + + + + + + Filter parameter. Only show images shared + with me by the specified owner, where the owner + is indicated by tenant ID. + + + + + + Filter parameter. The image status, such as + queued, saving, active, killed, deleted, and + pending_delete. + + + + + Filter parameter. Value of the minimum size + of the image in bytes. + + + + + Filter parameter. Value of the maximum size + of the image in bytes. + + + + + Sort key. All image attributes can be used + as the sort_key, except tags and link + attributes. Default is 'created_at.' + + + + + Sort direction. Valid values are 'asc' + (ascending) and 'desc' (descending). Default + is 'desc.' + + + + + + + + + + + + + + Deletes a specified image. + You cannot delete images with the 'protected' + attribute set to true (boolean); the response returns + the HTTP 403 status code. + You must first set the 'protected' attribute to + false (boolean) and then perform the delete. The + response is empty and returns the HTTP 204 status + code. + Since: Images 2.0 + + + + + + Uploads binary image data. + An image record must exist before a client can store + binary image data with it. + Content-Type must be 'application/octet-stream.' + Complete contents of request body is stored and is + accessible in its entirety by issuing a GET request to + the same URI. + Returns HTTP 204 status code. + Since: Images 2.0 + + + + + + Downloads binary image data. + Response body contains the raw binary data that + represents the actual virtual disk. The Content-Type + header is 'application/octet-stream.' The Content-MD5 + header contains an MD5 checksum of the image data. + Clients are encouraged to verify the integrity of the + image data they receive by using this checksum. + If no image data exists, returns the HTTP 204 status + code. + Since: Images 2.0 + + + + + + + Adds a specified tag to a specified image. + + Since: Images 2.0 + + + + + + Deletes a specified tag from a + specified image. + Since: Images 2.0 + + + + + + Adds a specified tenant ID + as an image member. + + Since: Images 2.1 + + + + + + + The member ID, i.e., the tenant ID of a user + with whom the image is to be shared. + + + + + + + + + + + + + + + + + + + + Sets the specified status for the specified member + of the specified image. + + Since: Images 2.1 + + + + + + + Status to which this image member should + be set. Valid values are: 'pending', + 'accepted', 'rejected'. + + + + + + + + + + + + + + + + + + + Deletes a specified tenant ID + from the member list of the specified image. + + Since: Images 2.1 + + + +
diff --git a/api-ref/src/wadls/image-api/src/v2/os-image-schemas-2.2.wadl b/api-ref/src/wadls/image-api/src/v2/os-image-schemas-2.2.wadl new file mode 100644 index 000000000..7a33a07d5 --- /dev/null +++ b/api-ref/src/wadls/image-api/src/v2/os-image-schemas-2.2.wadl @@ -0,0 +1,156 @@ + + + + + + + + + + + +%common;]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gets a json-schema document that + represents an images entity + An images entity is a container of image entities. + + The schema below is solely an example. Only the + response to the API call should be considered + authoritative. + + Since: Images 2.0 + + + + + + + + + + + + Gets a json-schema document that + represents an image entity. + The schema below is solely an example. Only the + response to the API call should be considered + authoritative. + + Since: Images 2.0 + + + + + + + + + + + + Gets a json-schema document that + represents an image members entity + An image members entity is a container of image + member entities. + + The schema below is solely an example. Only the + response to the API call should be considered + authoritative. + + Since: Images 2.1 + + + + + + + + + + + + Gets a json-schema document that + represents an image member entity. + The schema below is solely an example. Only the + response to the API call should be considered + authoritative. + + Since: Images 2.1 + + + + + + + + + + diff --git a/api-ref/src/wadls/image-api/src/v2/samples/image-member-create-request.json b/api-ref/src/wadls/image-api/src/v2/samples/image-member-create-request.json new file mode 100644 index 000000000..06ad8fe9a --- /dev/null +++ b/api-ref/src/wadls/image-api/src/v2/samples/image-member-create-request.json @@ -0,0 +1,3 @@ +{ + "member": "8989447062e04a818baf9e073fd04fa7" +} diff --git a/api-ref/src/wadls/image-api/src/v2/samples/image-member-create-response.json b/api-ref/src/wadls/image-api/src/v2/samples/image-member-create-response.json new file mode 100644 index 000000000..d6946dd93 --- /dev/null +++ b/api-ref/src/wadls/image-api/src/v2/samples/image-member-create-response.json @@ -0,0 +1,8 @@ +{ + "created_at": "2013-09-20T19:22:19Z", + "image_id": "a96be11e-8536-4910-92cb-de50aa19dfe6", + "member_id": "8989447062e04a818baf9e073fd04fa7", + "schema": "/v2/schemas/member", + "status": "pending", + "updated_at": "2013-09-20T19:25:31Z" +} diff --git a/api-ref/src/wadls/image-api/src/v2/samples/image-member-update-request.json b/api-ref/src/wadls/image-api/src/v2/samples/image-member-update-request.json new file mode 100644 index 000000000..4ec147f04 --- /dev/null +++ b/api-ref/src/wadls/image-api/src/v2/samples/image-member-update-request.json @@ -0,0 +1,3 @@ +{ + "status": "accepted" +} diff --git a/api-ref/src/wadls/image-api/src/v2/samples/image-member-update-response.json b/api-ref/src/wadls/image-api/src/v2/samples/image-member-update-response.json new file mode 100644 index 000000000..75ed4bed2 --- /dev/null +++ b/api-ref/src/wadls/image-api/src/v2/samples/image-member-update-response.json @@ -0,0 +1,8 @@ +{ + "created_at": "2013-09-20T19:22:19Z", + "image_id": "a96be11e-8536-4910-92cb-de50aa19dfe6", + "member_id": "8989447062e04a818baf9e073fd04fa7", + "schema": "/v2/schemas/member", + "status": "accepted", + "updated_at": "2013-09-20T20:15:31Z" +} diff --git a/api-ref/src/wadls/image-api/src/v2/samples/image-update-response.json b/api-ref/src/wadls/image-api/src/v2/samples/image-update-response.json new file mode 100644 index 000000000..931011f5b --- /dev/null +++ b/api-ref/src/wadls/image-api/src/v2/samples/image-update-response.json @@ -0,0 +1,17 @@ +{ + "id":"da3b75d9-3f4a-40e7-8a2c-bfab23927dea", + "name":"Fedora 17", + "status":"active", + "visibility":"public", + "size":2254249, + "checksum":"2cec138d7dae2aa59038ef8c9aec2390", + "tags":[ + "fedora", + "beefy" + ], + "created_at":"2012-08-10T19:23:50Z", + "updated_at":"2012-08-12T11:11:33Z", + "self":"/v2/images/da3b75d9-3f4a-40e7-8a2c-bfab23927dea", + "file":"/v2/images/da3b75d9-3f4a-40e7-8a2c-bfab23927dea/file", + "schema":"/v2/schemas/image" +} \ No newline at end of file diff --git a/api-ref/src/wadls/image-api/src/v2/samples/schemas-image-get-response.json b/api-ref/src/wadls/image-api/src/v2/samples/schemas-image-get-response.json index 5fe0b8a39..72df592a4 100644 --- a/api-ref/src/wadls/image-api/src/v2/samples/schemas-image-get-response.json +++ b/api-ref/src/wadls/image-api/src/v2/samples/schemas-image-get-response.json @@ -1,67 +1,177 @@ { - "name":"image", - "properties":{ - "id":{ - "type":"string" - }, - "name":{ - "type":"string" - }, - "visibility":{ - "enum":[ - "public", - "private" - ] - }, - "status":{ - "type":"string" - }, - "protected":{ - "type":"boolean" - }, - "tags":{ - "type":"array", - "items":{ - "type":"string" - } - }, - "checksum":{ - "type":"string" - }, - "size":{ - "type":"integer" - }, - "created_at":{ - "type":"string" - }, - "updated_at":{ - "type":"string" - }, - "file":{ - "type":"string" - }, - "self":{ - "type":"string" - }, - "schema":{ - "type":"string" - } - }, - "additionalProperties":{ - "type":"string" - }, - "links":[ - { - "href":"{self}", - "rel":"self" - }, - { - "href":"{file}", - "rel":"enclosure" - }, - { - "href":"{schema}", - "rel":"describedby" - } - ] -} \ No newline at end of file + "name": "image", + "properties": { + "architecture": { + "description": "Operating system architecture as specified in http://docs.openstack.org/trunk/openstack-compute/admin/content/adding-images.html", + "type": "string" + }, + "checksum": { + "description": "md5 hash of image contents. (READ-ONLY)", + "maxLength": 32, + "type": "string" + }, + "container_format": { + "description": "Format of the container", + "enum": [ + "ami", + "ari", + "aki", + "bare", + "ovf" + ], + "type": "string" + }, + "created_at": { + "description": "Date and time of image registration (READ-ONLY)", + "type": "string" + }, + "direct_url": { + "description": "URL to access the image file kept in external store (READ-ONLY)", + "type": "string" + }, + "disk_format": { + "description": "Format of the disk", + "enum": [ + "ami", + "ari", + "aki", + "vhd", + "vmdk", + "raw", + "qcow2", + "vdi", + "iso" + ], + "type": "string" + }, + "file": { + "description": "(READ-ONLY)", + "type": "string" + }, + "id": { + "description": "An identifier for the image", + "pattern": "^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$", + "type": "string" + }, + "instance_uuid": { + "description": "ID of instance used to create this image.", + "type": "string" + }, + "kernel_id": { + "description": "ID of image stored in Glance that should be used as the kernel when booting an AMI-style image.", + "pattern": "^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$", + "type": "string" + }, + "locations": { + "description": "A set of URLs to access the image file kept in external store", + "items": { + "properties": { + "metadata": { + "type": "object" + }, + "url": { + "maxLength": 255, + "type": "string" + } + }, + "required": [ + "url", + "metadata" + ], + "type": "object" + }, + "type": "array" + }, + "min_disk": { + "description": "Amount of disk space (in GB) required to boot image.", + "type": "integer" + }, + "min_ram": { + "description": "Amount of ram (in MB) required to boot image.", + "type": "integer" + }, + "name": { + "description": "Descriptive name for the image", + "maxLength": 255, + "type": "string" + }, + "os_distro": { + "description": "Common name of operating system distribution as specified in http://docs.openstack.org/trunk/openstack-compute/admin/content/adding-images.html", + "type": "string" + }, + "os_version": { + "description": "Operating system version as specified by the distributor", + "type": "string" + }, + "protected": { + "description": "If true, image will not be deletable.", + "type": "boolean" + }, + "ramdisk_id": { + "description": "ID of image stored in Glance that should be used as the ramdisk when booting an AMI-style image.", + "pattern": "^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$", + "type": "string" + }, + "schema": { + "description": "(READ-ONLY)", + "type": "string" + }, + "self": { + "description": "(READ-ONLY)", + "type": "string" + }, + "size": { + "description": "Size of image file in bytes (READ-ONLY)", + "type": "integer" + }, + "status": { + "description": "Status of the image (READ-ONLY)", + "enum": [ + "queued", + "saving", + "active", + "killed", + "deleted", + "pending_delete" + ], + "type": "string" + }, + "tags": { + "description": "List of strings related to the image", + "items": { + "maxLength": 255, + "type": "string" + }, + "type": "array" + }, + "updated_at": { + "description": "Date and time of the last image modification (READ-ONLY)", + "type": "string" + }, + "visibility": { + "description": "Scope of image accessibility", + "enum": [ + "public", + "private" + ], + "type": "string" + } + }, + "additionalProperties": { + "type": "string" + }, + "links": [ + { + "href": "{self}", + "rel": "self" + }, + { + "href": "{file}", + "rel": "enclosure" + }, + { + "href": "{schema}", + "rel": "describedby" + } + ] +} diff --git a/api-ref/src/wadls/image-api/src/v2/samples/schemas-image-member-get-response.json b/api-ref/src/wadls/image-api/src/v2/samples/schemas-image-member-get-response.json new file mode 100644 index 000000000..611f0a245 --- /dev/null +++ b/api-ref/src/wadls/image-api/src/v2/samples/schemas-image-member-get-response.json @@ -0,0 +1,34 @@ +{ + "name": "member", + "properties": { + "created_at": { + "description": "Date and time of image member creation", + "type": "string" + }, + "image_id": { + "description": "An identifier for the image", + "pattern": "^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$", + "type": "string" + }, + "member_id": { + "description": "An identifier for the image member (tenantId)", + "type": "string" + }, + "status": { + "description": "The status of this image member", + "enum": [ + "pending", + "accepted", + "rejected" + ], + "type": "string" + }, + "updated_at": { + "description": "Date and time of last modification of image member", + "type": "string" + }, + "schema": { + "type": "string" + } + } +} diff --git a/api-ref/src/wadls/image-api/src/v2/samples/schemas-image-members-get-response.json b/api-ref/src/wadls/image-api/src/v2/samples/schemas-image-members-get-response.json new file mode 100644 index 000000000..39b0d4117 --- /dev/null +++ b/api-ref/src/wadls/image-api/src/v2/samples/schemas-image-members-get-response.json @@ -0,0 +1,51 @@ +{ + "name": "members", + "properties": { + "members": { + "items": { + "name": "member", + "properties": { + "created_at": { + "description": "Date and time of image member creation", + "type": "string" + }, + "image_id": { + "description": "An identifier for the image", + "pattern": "^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$", + "type": "string" + }, + "member_id": { + "description": "An identifier for the image member (tenantId)", + "type": "string" + }, + "status": { + "description": "The status of this image member", + "enum": [ + "pending", + "accepted", + "rejected" + ], + "type": "string" + }, + "updated_at": { + "description": "Date and time of last modification of image member", + "type": "string" + }, + "schema": { + "type": "string" + } + } + }, + "type": "array" + }, + "schema": { + "type": "string" + } + }, + "links": [ + { + "href": "{schema}", + "rel": "describedby" + } + ] +} diff --git a/api-ref/src/wadls/image-api/src/v2/samples/schemas-images-get-response.json b/api-ref/src/wadls/image-api/src/v2/samples/schemas-images-get-response.json index 0816ddb77..526d1989e 100644 --- a/api-ref/src/wadls/image-api/src/v2/samples/schemas-images-get-response.json +++ b/api-ref/src/wadls/image-api/src/v2/samples/schemas-images-get-response.json @@ -1,98 +1,208 @@ { - "name":"images", - "properties":{ - "images":{ - "items":{ - "type":"array", - "name":"image", - "properties":{ - "id":{ - "type":"string" - }, - "name":{ - "type":"string" - }, - "visibility":{ - "enum":[ - "public", - "private" - ] - }, - "status":{ - "type":"string" - }, - "protected":{ - "type":"boolean" - }, - "tags":{ - "type":"array", - "items":{ - "type":"string" - } - }, - "checksum":{ - "type":"string" - }, - "size":{ - "type":"integer" - }, - "created_at":{ - "type":"string" - }, - "updated_at":{ - "type":"string" - }, - "file":{ - "type":"string" - }, - "self":{ - "type":"string" - }, - "schema":{ - "type":"string" - } + "name": "images", + "properties": { + "first": { + "type": "string" + }, + "images": { + "items": { + "name": "image", + "properties": { + "architecture": { + "description": "Operating system architecture as specified in http://docs.openstack.org/trunk/openstack-compute/admin/content/adding-images.html", + "type": "string" + }, + "checksum": { + "description": "md5 hash of image contents. (READ-ONLY)", + "maxLength": 32, + "type": "string" + }, + "container_format": { + "description": "Format of the container", + "enum": [ + "ami", + "ari", + "aki", + "bare", + "ovf" + ], + "type": "string" + }, + "created_at": { + "description": "Date and time of image registration (READ-ONLY)", + "type": "string" + }, + "direct_url": { + "description": "URL to access the image file kept in external store (READ-ONLY)", + "type": "string" + }, + "disk_format": { + "description": "Format of the disk", + "enum": [ + "ami", + "ari", + "aki", + "vhd", + "vmdk", + "raw", + "qcow2", + "vdi", + "iso" + ], + "type": "string" + }, + "file": { + "description": "(READ-ONLY)", + "type": "string" + }, + "id": { + "description": "An identifier for the image", + "pattern": "^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$", + "type": "string" + }, + "instance_uuid": { + "description": "ID of instance used to create this image.", + "type": "string" + }, + "kernel_id": { + "description": "ID of image stored in Glance that should be used as the kernel when booting an AMI-style image.", + "pattern": "^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$", + "type": "string" + }, + "locations": { + "description": "A set of URLs to access the image file kept in external store", + "items": { + "properties": { + "metadata": { + "type": "object" + }, + "url": { + "maxLength": 255, + "type": "string" + } + }, + "required": [ + "url", + "metadata" + ], + "type": "object" + }, + "type": "array" + }, + "min_disk": { + "description": "Amount of disk space (in GB) required to boot image.", + "type": "integer" + }, + "min_ram": { + "description": "Amount of ram (in MB) required to boot image.", + "type": "integer" + }, + "name": { + "description": "Descriptive name for the image", + "maxLength": 255, + "type": "string" + }, + "os_distro": { + "description": "Common name of operating system distribution as specified in http://docs.openstack.org/trunk/openstack-compute/admin/content/adding-images.html", + "type": "string" + }, + "os_version": { + "description": "Operating system version as specified by the distributor", + "type": "string" + }, + "protected": { + "description": "If true, image will not be deletable.", + "type": "boolean" + }, + "ramdisk_id": { + "description": "ID of image stored in Glance that should be used as the ramdisk when booting an AMI-style image.", + "pattern": "^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$", + "type": "string" + }, + "schema": { + "description": "(READ-ONLY)", + "type": "string" + }, + "self": { + "description": "(READ-ONLY)", + "type": "string" + }, + "size": { + "description": "Size of image file in bytes (READ-ONLY)", + "type": "integer" + }, + "status": { + "description": "Status of the image (READ-ONLY)", + "enum": [ + "queued", + "saving", + "active", + "killed", + "deleted", + "pending_delete" + ], + "type": "string" + }, + "tags": { + "description": "List of strings related to the image", + "items": { + "maxLength": 255, + "type": "string" + }, + "type": "array" + }, + "updated_at": { + "description": "Date and time of the last image modification (READ-ONLY)", + "type": "string" + }, + "visibility": { + "description": "Scope of image accessibility", + "enum": [ + "public", + "private" + ], + "type": "string" + } + }, + "additionalProperties": { + "type": "string" + }, + "links": [ + { + "href": "{self}", + "rel": "self" + }, + { + "href": "{file}", + "rel": "enclosure" + }, + { + "href": "{schema}", + "rel": "describedby" + } + ] }, - "additionalProperties":{ - "type":"string" - }, - "links":[ - { - "href":"{self}", - "rel":"self" - }, - { - "href":"{file}", - "rel":"enclosure" - }, - { - "href":"{schema}", - "rel":"describedby" - } - ] - } - }, - "schema":{ - "type":"string" - }, - "next":{ - "type":"string" - }, - "first":{ - "type":"string" - } - }, - "links":[ - { - "href":"{first}", - "rel":"first" - }, - { - "href":"{next}", - "rel":"next" - }, - { - "href":"{schema}", - "rel":"describedby" - } - ] + "type": "array" + }, + "next": { + "type": "string" + }, + "schema": { + "type": "string" + } + }, + "links": [ + { + "href": "{first}", + "rel": "first" + }, + { + "href": "{next}", + "rel": "next" + }, + { + "href": "{schema}", + "rel": "describedby" + } + ] } \ No newline at end of file