Accessing SMARTER-backend
The SMARTER-backend is a RESTful API, which means that it’s a web service that provides access to its resources via HTTP requests. The API is designed to be simple and easy to use, and it’s based on the JSON data format, which is a lightweight data-interchange format that is easy for humans to read and write and easy for machines to parse and generate.
Query parameters
The API endpoints described in the Introduction return by default
all the SMARTER objects they managed. However it’s possible to filter out the
results returned using GET parameters (also called URL parameters or
query strings) which are usually
name-value pairs, separated by an = sign. For example, by submitting a request
to:
https://webserver.ibba.cnr.it/smarter-api/breeds
You will get all the Breeds stored in smarter database, but you can filter out
the results by species by passing species=Goat parameter:
https://webserver.ibba.cnr.it/smarter-api/breeds?species=Goat
Please note that parameters are not part of the API endpoint: The question mark
is used as a separator, and divide the endpoint from the GET parameter. You
can provide multiple parameters by joining them with the & character, for
example:
https://webserver.ibba.cnr.it/smarter-api/breeds?species=Goat&search=land
will retrive all the SMARTER goat breeds which have land in ther name (Landrace,
for example, but also Rangeland)
Hint
The page https://webserver.ibba.cnr.it/smarter-api/docs/ describes every API endpoints with their own set of parameters, see the proper endpoint documentation to have a list of the allowed parameters and what they do.
Pagination
API queries could returned thousands of results, so to improve performance and
lower traffic between client and server, all the API endpoints implements pagination.
This means that each query returns a limited set of results, but it returns also
the total number of objects with informations useful to collect the next batch
of objects. For example, if you analyze the breed API response while search for
all the objects (https://webserver.ibba.cnr.it/smarter-api/breeds), you will
see a reply like this:
{
"items": [
...
],
"next": "/smarter-api/breeds?size=10&page=2",
"page": 1,
"pages": 26,
"prev": null,
"size": 10,
"total": 257
}
Where in the items array there will be size Breed objects (default 10,
omitted here to better describe the response); in the next attribute there
will be the URLs to be used to get the next batch of objects, if you
get the next page, you will get a prev attribute for the previous page;
The total stands for the total number of breed objects and the page
stands for the current batch page number. By default, the behaviour is to
display 10 results per page, however you could change this by setting a different
page size with a get parameter, for example size=20.
Warning
Please remember that pagination helps to better manage resources, don’t try to retrieve all the results for a single query request: there could be a size limit or you can have issues in retrieve / process the results
Examples with code
Here we list some patterns on how to interact with the SMARTER-backend, feel free to follow the method you prefer:
We have also a custom R package that you can use to interact with the SMARTER-backend, you can find it on GitHub.