API design
Principles of the API design:
- All documented routes should be appended to https://blisk.ijs.si/api/.
- All the routes are available as POST calls, even if they do not result in changes in the database, because:
- some routes will have non-trivial input parameters (structured data, arbitrary strings), which are difficult and clunky to encode as path parameters, and expecting request body parameters in GET calls can be problematic and misleading
- we can have short clear URLS for all routes, and there are limits on URL length in some contexts.
- Some routes also have a GET counterpart, which behave the same way as the POST call but do not allow for response body parameters (default values are used instead).
- All request parameters are provided as JSON request body parameters, except for the object's id, which is used to identify a given object and provided as an obligatory path parameter for certain types of calls (e.g., retrieve).
- Each route falls under a particular type of operation identified with a particular verb as the first part of the route. The verbs include:
- retrieve: return data for a given object
- search: return all the objects which match the set of search parameters
- create: create a new object based on the parameters provided, unless a matching object already exists and only one is allowed (we almost called this "get_or_create" instead)
- update: update the properties of a given object based on the parameters provided
- delete: delete a given object
- attach: attach the given object to a particular resource, if not yet attached
- detach: detach the given object from a particular resource, if attached
- process: process the input data with an appropriate independent tool (e.g., the CLASSLA NLP library)
- If the operation verb has a "-batch" suffix, it differs from its non-batch counterpart as follows:
each item in the input is processed (allowinguserstocan makejust a single1 APIcall)call instead of N API calls for N items- the input data should be a list, with each element in the format expected by the non-batch route
- the output data
hierarchyishasaan extra level at the toplist, withtwoeachfields results: a list of output data, eachelement corresponding to theinput dataelement at the same position in theinput
errors: a list of errors during processing, in whichstatus: thepositionstatus of theproblematic item is also includedoperation (ine.g.,which"ok",case"warning", "error")
- message: a message describing the
itemresultswillofbethenulloperation (e.g., whether an object was found or created, or the cause of the warning or error)