Installation is straightforward. Since we use fetch underneath the
hood, we recommend installing alongside a fetch polyfill.
If using yarn:
If using npm:
Now import it:
Typescript
Javascript
…or, if you’re avoiding JS modules, jsorm will be available as a global in
the browser.
Defining Models
Connecting to the API
Just like ActiveRecord, our models will inherit from a base class that
holds connection information (ApplicationRecord, or
ActiveRecord::Base in Rails < 5):
Typescript
Javascript
All URLs follow the following pattern:
baseUrl + apiNamespace + jsonapiType
As you can see above, typically baseUrl and apiNamespace are set on
a top-level ApplicationRecord (though any subclass can override).
jsonapiType, however, is set per-model:
Typescript
Javascript
With the above configuration, all Person endpoints will begin
http://my-api.com/api/v1/people.
TIP: Avoid CORS and use relative paths by simply setting baseUrl to
""
TIP: You can always use the endpoint option to override this pattern
and set the endpoint manually.
Defining Attributes
ActiveRecord automatically sets attributes by introspecting database
columns. We could do the same - swagger.json is our schema - but tend
to agree with those who feel this aspect of ActiveRecord is a bit too
“magical”. In addition, explicitly defining our attributes can be used
to track which applications are using which attributes of the API.
Though this is configurable, by default we expect the API to be
under_scored and attributes to be camelCased.
Typescript
Javascript
Attributes can be marked read-only, so they are never sent to the server
on a write request:
Typescript
Javascript
Defining Relationships
Just like ActiveRecord, there are HasMany, BelongsTo, and
HasOne relationships:
Typescript
Javascript
By default, we expect the relationship name to correspond to a
pluralized jsonapiType on a separate Model. If your models don’t
use this convention, feel free to supply it explicitly: