Entity Formats
The API supports three entity formats: CSV, JSON and XML. Generally, JSON is the
preferred format, but XML is a fully valid option. CSV lacks proper support for
null properties and should thus only be used in certain circumstances.
The request entity format is simply specified using the mandatory Content-Type
header. The response format can be specified in two different ways.
-
You can add an
Acceptrequest header. This is the preferred option. Here is an example HTTP request using this method.GET /v1/~realm/products HTTP/1.1
Host: test.onslip360.com
Accept: application/json -
Alternatively, you can add a
.csv,.jsonor.xmlextension to the resource you're accessing.GET /v1/~realm/products.xml HTTP/1.1
Host: test.onslip360.comor
GET /v1/~realm/products/1.xml HTTP/1.1
Host: test.onslip360.com
An example best illustrates the different entity formats. This is an object that represents a company/account.
JSON
First up, JSON:
{
"address" : "Kungsgatan 20\\n58218 Linköping",
"alias" : "onslip.com",
"business-category" : "event-services",
"created" : "2014-01-28T08:57:21.191Z",
"email" : "",
"feature" : {
"flags" : [
"barcode-scanners",
"auto-close-batch"
]
},
"name" : "Onslip Cloud AB",
"org-number" : "123456-7890",
"phone-number" : "0500-600 111",
"updated-by" : 1,
"updated" : "2017-02-02T13:01:35.120Z",
"web-address" : "http://onslip.com"
}
XML
Second, XML. Primitive properties are stored as attributes while complex
datatypes are child elements. Lists of primitive types use _ as element name;
lists of complex type will use the object's name as element name.
<company address="Kungsgatan 20 58218 Linköping"
alias="onslip.com"
business-category="event-services"
created="2014-01-28T08:57:21.191Z"
email=""
name="Onslip Cloud AB"
org-number="123456-7890"
phone-number="0500-600 111"
updated="2017-02-02T13:01:35.120Z"
updated-by="1"
web-address="http://onslip.com">
<feature>
<flags>
<_>barcode-scanners</_>
<_>auto-close-batch</_>
</flags>
</feature>
</company>
The server never sends null properties in responses, but for PATCH requests,
the client may need to send a property with value null to clear it. In this
case, the XML Schema property nil on an empty child element should be used to
represent null.
<my-entity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<my-prop xsi:nil="true" />
</my-entity
CSV
Finally, CSV:
"address","alias","business-category","created","email","feature.flags.0","feature.flags.1","name","org-number","phone-number","updated","updated-by","web-address"
"Kungsgatan 20
58218 Linköping","onslip.com","event-services","2014-01-28T08:57:21.191Z","","barcode-scanners","auto-close-batch","Onslip Cloud AB","123456-7890","0500-600 111","2017-02-02T13:01:35.120Z","1","http://onslip.com"
Note that null values cannot be represented in CSV, so don't use CSV for PATCH request payloads.
Binary Properties and Direct Property Access
Binary values can either be stored as Base64String properties (see Resources and
Endpoints) or as
File properties. Base64String values are returned inline,
just like any other property, while File properties only contain metadata about the binary resource.
To access the content of File properties, append a colon-separated propery path at the end of the resource. For
instance, in order to download the take-out icon from example.com location #1, issue a GET request to the following
resource:
https://test.onslip360.com/v1/~example.com/locations/1:take-out-config:logo
Not only File properies are supported. You may also access Base64String properties (as application/octet-stream),
subobjects and subarrays (as application/json, application/xml or application/csv) and primitives (as
text/plain). Supported HTTP methods are GET (read), PUT (write) and DELETE (remove). PATCH is not supported.
When a property is modified using PUT and DELETE in this manner, the server responds with the HTTP response code
205, Reset Content, in order to signal that the entity was updated and should be refresed by the client.
Binary resources are never converted to other formats (subobject and subarrays, however, are) and always sent as-is. To
indicate that these responses should not be parsed by the client, a Content-Disposition header is added to the
response. The header value is set to inline.
By appending !/ followed by a filename to the request path, the Content-Disposition value is changed to
attachment. This is actually supported for all resourcees, not only for direct property access requests, and can be
used to trigger a download/save dialog in web browsers.