Class JSONAPIAdapter
| Extends: | RESTAdapter |
|---|---|
| Defined in: | ../adapter/addon/json-api.js:11 |
| Module: | @ember-data/adapter |
| Since: | v1.13.0 |
coalesceFindRequests
| Module: | @ember-data/adapter |
|---|
Defined in ../adapter/addon/json-api.js:167
By default the JSONAPIAdapter 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:
{
data: {
id: 1,
type: 'post',
relationship: {
comments: {
data: [
{ id: 1, type: 'comment' },
{ id: 2, type: 'comment' }
]
}
}
}
} By default calling post.get('comments') will trigger the following requests(assuming the comments haven't been loaded before):
GET /comments/1 GET /comments/2
If you set coalesceFindRequests to true it will instead trigger the following request:
GET /comments?filter[id]=1,2
Setting coalesceFindRequests to true also works for store.find requests and belongsTo relationships accessed within the same runloop. If you set coalesceFindRequests: true
store.findRecord('comment', 1);
store.findRecord('comment', 2); will also send a request to: GET /comments?filter[id]=1,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.
coalesceFindRequests
| Module: | @ember-data/adapter |
|---|
Inherited from Adapter ../adapter/addon/index.js:414
By default the store will try to coalesce all fetchRecord calls within the same runloop into as few requests as possible by calling groupRecordsForFindMany and passing it into a findMany call. You can opt out of this behaviour by either not implementing the findMany hook or by setting coalesceFindRequests to false.
headers
| Module: | @ember-data/adapter |
|---|
Inherited from RESTAdapter ../adapter/addon/rest.js:462
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.jsimport RESTAdapter from '@ember-data/adapter/rest';
import { computed } from '@ember/object';
export default class ApplicationAdapter extends RESTAdapter {
headers: computed(function() {
return {
'API_KEY': 'secret key',
'ANOTHER_HEADER': 'Some header value'
};
})
} host
| Module: | @ember-data/adapter |
|---|
Inherited from RESTAdapter ../adapter/addon/rest.js:445
An adapter can target other hosts by setting the host property.
app/adapters/application.jsimport RESTAdapter from '@ember-data/adapter/rest';
export default class ApplicationAdapter extends RESTAdapter {
host = 'https://api.example.com';
} Requests for the Post model would now target https://api.example.com/post/.
namespace
| Module: | @ember-data/adapter |
|---|
Inherited from RESTAdapter ../adapter/addon/rest.js:427
Endpoint paths can be prefixed with a namespace by setting the namespace property on the adapter:
app/adapters/application.jsimport RESTAdapter from '@ember-data/adapter/rest';
export default class ApplicationAdapter extends RESTAdapter {
namespace = 'api/1';
} Requests for the Post model would now target /api/1/post/.
useFetch public
| Module: | @ember-data/adapter |
|---|
Inherited from RESTAdapter ../adapter/addon/rest.js:315
© 2020 Yehuda Katz, Tom Dale and Ember.js contributors
Licensed under the MIT License.
https://api.emberjs.com/ember-data/3.25/classes/JSONAPIAdapter/properties