I\'m designing a REST API for the first time, so I have what I consider a quite basic question about its design.
I would like the files collection to return an ID (o
Just do it.
I would call it a standard RESTful API design pattern to have an abbreviated resource representation in your collections resource and the full representation only on your entity resource.
So /files
would return something like:
[
{
name: "foo",
url: "example.org/files/3321"
},
{
name: "bar",
url: "example.org/files/3192910"
}
]
While /files/3321
returns the full file
representation
{
name: "foo",
self: "example.org/files/3321"
encoding: "UTF-8",
type: "xml-document"
}
You could have a custom media type for the full representation of the resource and a custom media type for the identifiers of the files.
For example, you could use one of the following (or both) media types to retrieve a full representation of a collection of files:
GET /api/files HTTP/1.1
Host: example.com
Accept: application/json
GET /api/files HTTP/1.1
Host: example.com
Accept: application/vnd.company+json
And the following media type to retrieve only the identifiers of the files:
GET /api/files HTTP/1.1
Host: example.com
Accept: application/vnd.company.id+json
Alternatively, you could support selecting the fields to be retrieved with a query string parameter.
Use the following to retrieve the full representation of a collection of files:
GET /api/files HTTP/1.1
Host: example.com
Accept: application/json
And the following to retrieve only the identifiers of the files:
GET /api/files?fields=id HTTP/1.1
Host: example.com
Accept: application/json
The field
query parameter could support a list of values separated by commas, allowing the selection of multiple fields/properties:
GET /api/files?fields=id,name,author HTTP/1.1
Host: example.com
Accept: application/json