Examples
These examples are based on an imaginary API. Jump here to see the resources it serves.
Activate customers
Activate all customers who are deactivated.
This example demonstrates:
- setting default headers for all requests
- in this example, an authorization header is set when creating the
Api
object - each request will include this header
- in this example, an authorization header is set when creating the
- getting the root resource
- following a link to a collection resource
- from root to customers
- iterating over a collection
- accessing the items in the collection using the
collection()
method ensures that each item is a HAL resource object - in other words, if you access the items directly, each item would not have the "has rel" method (for example)
- accessing the items in the collection using the
- checking if a resource has a specific link
- using a resource's affordance to change its state (using PUT to activate a customer)
- contrast this with setting the active property directly
- by using the affordance, the API can enforce business rules, and it can change how activation occur without changing the client code
Print orders
Print the orders for a given customer.
This example demonstrates:
- following a link to a resource with a templated URL
- using the response status code to navigate the user's workflow
- following a link from one resource to its child resource collection
- mixing direct access to
_items
with managed iteration using thecollection()
method
Pagination
Pagination using query string parameters.
This example demonstrates:
- using query string parameters to do pagination
Sample API
The examples above are based on an imaginary API that serves the following resources:
/ | /customers |
{ "_links": { "self: { "href": "/" }, "customers": { "href": "/customers" }, "orders": { "href": "/orders" } } } | { "_items": [ { "membershipId": "A375", "givenName": "Pat", "familyName": "Smith", "active": true, "_links": { "self": { "href": "/customers/A375", }, "edit-form": { "href": "/customers/A375/edit-form", }, "orders": { "href": "/customers/A375/orders", }, "deactivate": { "href": "/customers/A375/deactivate", "_note": "PUT to deactivate" } } }, { "membershipId": "R933", "givenName": "Darcy", "familyName": "Jones", "active": false, "_links": { "self": { "href": "/customers/R933", }, "edit-form": { "href": "/customers/R933/edit-form", }, "orders": { "href": "/customers/R933/orders", }, "activate": { "href": "/customers/R933/activate", "_note": "PUT to activate" } } }, ... ... ... ], "_links": { "self": { "href": "/customers" }, "item": { "href": "/customers/{membershipId}", "templated": true }, "create-form": { "href": "/customers/create-form", } } } |
/customers/A375 | /customers/A375/orders |
{ "membershipId": "A375", "givenName": "Pat", "familyName": "Smith", "active": true, "_links": { "self": { "href": "/customers/A375", }, "edit-form": { "href": "/customers/A375/edit-form", }, "orders": { "href": "/customers/A375/orders", }, "deactivate": { "href": "/customers/A375/deactivate", "_note": "PUT to deactivate this member" } } } | { "_items": [ { "orderNumber": "FK9384", "partNumber": "009343-12", "quantity": 3, "_customer_ref": "A375", "_links": { "self": { "href": "/orders/65fd80549561b2884948c312", }, "edit-form": { "href": "/orders/65fd80549561b2884948c312/edit-form", }, "parent": { "href": "/customers/A375", }, "collection": { "href": "/customers/A375/orders" } } }, ... ... ... ], "_links": { "self": { "href": "/customers/A375/orders" }, "item": { "href": "/orders/{id}", "templated": true }, "create-form": { "href": "/customers/A375/create-form", } } } |