Class DS.JSONAPIAdapter

Show:

Module: ember-data

By default the RESTAdapter will send each find request coming from a store.find or from accessing a relationship separately to the server. If your server supports passing ids as a query string, you can set coalesceFindRequests to true to coalesce all find requests within a single runloop.

For example, if you have an initial payload of:

1
2
3
4
5
6
{
  post: {
    id: 1,
    comments: [1, 2]
  }
}

By default calling post.get('comments') will trigger the following requests(assuming the comments haven't been loaded before):

1
2
GET /comments/1
GET /comments/2

If you set coalesceFindRequests to true it will instead trigger the following request:

1
GET /comments?ids[]=1&ids[]=2

Setting coalesceFindRequests to true also works for store.find requests and belongsTo relationships accessed within the same runloop. If you set coalesceFindRequests: true

1
2
store.findRecord('comment', 1);
store.findRecord('comment', 2);

will also send a request to: GET /comments?ids[]=1&ids[]=2

Note: Requests coalescing rely on URL building strategy. So if you override buildURL in your app groupRecordsForFindMany more likely should be overridden as well in order for coalescing to work.

Module: ember-data

If you would like your adapter to use a custom serializer you can set the defaultSerializer property to be the name of the custom serializer.

Note the defaultSerializer serializer has a lower priority than a model specific serializer (i.e. PostSerializer) or the application serializer.

app/adapters/django.js
1
2
3
4
5
import DS from 'ember-data';

export default DS.Adapter.extend({
  defaultSerializer: 'django'
});
Module: ember-data

Some APIs require HTTP headers, e.g. to provide an API key. Arbitrary headers can be set as key/value pairs on the RESTAdapter's headers object and Ember Data will send them along with each ajax request. For dynamic headers see headers customization.

app/adapters/application.js
1
2
3
4
5
6
7
8
import DS from 'ember-data';

export default DS.RESTAdapter.extend({
  headers: {
    "API_KEY": "secret key",
    "ANOTHER_HEADER": "Some header value"
  }
});
Module: ember-data

An adapter can target other hosts by setting the host property.

app/adapters/application.js
1
2
3
4
5
import DS from 'ember-data';

export default DS.RESTAdapter.extend({
  host: 'https://api.example.com'
});

Requests for App.Post would now target https://api.example.com/post/.

Module: ember-data

Endpoint paths can be prefixed with a namespace by setting the namespace property on the adapter:

app/adapters/application.js
1
2
3
4
5
import DS from 'ember-data';

export default DS.RESTAdapter.extend({
  namespace: 'api/1'
});

Requests for App.Post would now target /api/1/post/.