Serrano is a hypermedia implementation for Avocado that adheres to the constraints of REST.
Introduction
Serrano defines resources and exposes hypermedia APIs that loosely map to Avocado programmatic APIs. For example, Avocado has the DataField
model which instances correspond to a field in the data model. Fields can be programmatically defined and accessed:
from avocado.models import DataField
f = DataField('library', 'book', 'title')
f.title = 'Title'
f.description = 'The title of the book'
f.get_plural_name() # Titles
f.simple_type # string
Serrano has a resource for DataField
instances which can be accessed with a URL (assuming the above field's primary key is 1):
GET /api/fields/1/
Accept: application/json
The response body has quite a few properties which contain metadata for the field being accessed as well as a _links
objects which contains related links:
{
"id": 1,
"app_name": "library",
"model_name": "book",
"field_name": "title",
"category": null,
"description": "The title of the book",
"internal_type": "char",
"keywords": "",
"modified": "2012-10-11 14:29:43",
"name": "Title",
"nullable": false,
"plural_name": "Titles",
"published": true,
"searchable": true,
"simple_type": "string",
...
"_links": {
"self": {
"href": "http://example.com/api/fields/1/",
"rel": "self"
},
...
}
}
Support for Writes
Some resources such as ones corresponding to Avocado's DataContext
, DataView
, and DataQuery
models support POST
, PUT
, and DELETE
requests. This enables clients the ability to manipulate objects of these types they have permission using the API.
PUT /api/contexts/1/
Accept: application/json
Content-Type: application/json
{
"id": 1,
"json": {
"field": "1",
"operator": "icontains",
"value": "api"
},
...
}
Next Steps
To get started using Serrano, follow the install & setup guide.
For more information on what endpoints are defined, view the list of endpoint.