BuildURLMixin Class
Using BuildURLMixin
To use URL building, include the mixin when extending an adapter, and call buildURL
where needed.
The default behaviour is designed for RESTAdapter.
Example
import Adapter, { BuildURLMixin } from '@ember-data/adapter';
export default class ApplicationAdapter extends Adapter.extend(BuildURLMixin) {
findRecord(store, type, id, snapshot) {
var url = this.buildURL(type.modelName, id, snapshot, 'findRecord');
return this.ajax(url, 'GET');
}
}
Attributes
The host
and namespace
attributes will be used if defined, and are optional.
Item Index
Methods
_buildURL
-
modelName
-
id
Parameters:
-
modelName
String -
id
String
Returns:
url
buildURL
-
modelName
-
id
-
snapshot
-
requestType
-
query
Builds a URL for a given type and optional ID.
By default, it pluralizes the type's name (for example, 'post' becomes 'posts' and 'person' becomes 'people'). To override the pluralization see pathForType.
If an ID is specified, it adds the ID to the path generated
for the type, separated by a /
.
When called by RESTAdapter.findMany()
the id
and snapshot
parameters
will be arrays of ids and snapshots.
Parameters:
-
modelName
String -
id
(String | Array | Object)single id or array of ids or query
-
snapshot
(Snapshot | SnapshotRecordArray)single snapshot or array of snapshots
-
requestType
String -
query
Objectobject of query parameters to send for query requests.
Returns:
url
pathForType
-
modelName
Determines the pathname for a given type.
By default, it pluralizes the type's name (for example, 'post' becomes 'posts' and 'person' becomes 'people').
Pathname customization
For example, if you have an object LineItem
with an
endpoint of /line_items/
.
import RESTAdapter from '@ember-data/adapter/rest';
import { undesrcore, pluralize } from '<app-name>/utils/string-utils';
export default class ApplicationAdapter extends RESTAdapter {
pathForType(modelName) {
return pluralize(underscore(modelName));
}
}
Parameters:
-
modelName
String
Returns:
path
urlForCreateRecord
-
modelName
-
snapshot
Builds a URL for a record.save()
call when the record was created
locally using store.createRecord()
.
Example:
import RESTAdapter from '@ember-data/adapter/rest';
export default class ApplicationAdapter extends RESTAdapter {
urlForCreateRecord(modelName, snapshot) {
return super.urlForCreateRecord(...arguments) + '/new';
}
}
Parameters:
-
modelName
String -
snapshot
Snapshot
Returns:
url
urlForDeleteRecord
-
id
-
modelName
-
snapshot
Builds a URL for a record.save()
call when the record has been deleted locally.
Example:
import RESTAdapter from '@ember-data/adapter/rest';
export default class ApplicationAdapter extends RESTAdapter {
urlForDeleteRecord(id, modelName, snapshot) {
return super.urlForDeleteRecord(...arguments) + '/destroy';
}
}
Parameters:
-
id
String -
modelName
String -
snapshot
Snapshot
Returns:
url
urlForFindAll
-
modelName
-
snapshot
Builds a URL for a store.findAll(type)
call.
Example:
import JSONAPIAdapter from '@ember-data/adapter/json-api';
export default class ApplicationAdapter extends JSONAPIAdapter {
urlForFindAll(modelName, snapshot) {
let baseUrl = this.buildURL(modelName);
return ${baseUrl}/data/comments.json
;
}
}
Parameters:
-
modelName
String -
snapshot
SnapshotRecordArray
Returns:
url
urlForFindBelongsTo
-
id
-
modelName
-
snapshot
Builds a URL for fetching an async belongsTo
relationship when a url
is not provided by the server.
Example:
import JSONAPIAdapter from '@ember-data/adapter/json-api';
export default class ApplicationAdapter extends JSONAPIAdapter {
urlForFindBelongsTo(id, modelName, snapshot) {
let baseUrl = this.buildURL(modelName, id);
return ${baseUrl}/relationships
;
}
}
Parameters:
-
id
String -
modelName
String -
snapshot
Snapshot
Returns:
url
urlForFindHasMany
-
id
-
modelName
-
snapshot
Builds a URL for fetching an async hasMany
relationship when a URL
is not provided by the server.
Example:
import JSONAPIAdapter from '@ember-data/adapter/json-api';
export default class ApplicationAdapter extends JSONAPIAdapter {
urlForFindHasMany(id, modelName, snapshot) {
let baseUrl = this.buildURL(modelName, id);
return ${baseUrl}/relationships
;
}
}
Parameters:
-
id
String -
modelName
String -
snapshot
Snapshot
Returns:
url
urlForFindMany
-
ids
-
modelName
-
snapshots
Builds a URL for coalescing multiple store.findRecord(type, id)
records into 1 request when the adapter's coalesceFindRequests
property is true
.
Example:
import RESTAdapter from '@ember-data/adapter/rest';
export default class ApplicationAdapter extends RESTAdapter {
urlForFindMany(ids, modelName) {
let baseUrl = this.buildURL();
return ${baseUrl}/coalesce
;
}
}
Parameters:
-
ids
Array -
modelName
String -
snapshots
Array
Returns:
url
urlForFindRecord
-
id
-
modelName
-
snapshot
Builds a URL for a store.findRecord(type, id)
call.
Example:
import JSONAPIAdapter from '@ember-data/adapter/json-api';
export default class ApplicationAdapter extends JSONAPIAdapter {
urlForFindRecord(id, modelName, snapshot) {
let baseUrl = this.buildURL(modelName, id, snapshot);
return ${baseUrl}/users/${snapshot.adapterOptions.user_id}/playlists/${id}
;
}
}
Parameters:
-
id
String -
modelName
String -
snapshot
Snapshot
Returns:
url
urlForQuery
-
query
-
modelName
Builds a URL for a store.query(type, query)
call.
Example:
import RESTAdapter from '@ember-data/adapter/rest';
export default class ApplicationAdapter extends RESTAdapter {
host = 'https://api.github.com';
urlForQuery (query, modelName) {
switch(modelName) {
case 'repo':
return https://api.github.com/orgs/${query.orgId}/repos
;
default:
return super.urlForQuery(...arguments);
}
}
}
Parameters:
-
query
Object -
modelName
String
Returns:
url
urlForQueryRecord
-
query
-
modelName
Builds a URL for a store.queryRecord(type, query)
call.
Example:
import RESTAdapter from '@ember-data/adapter/rest';
export default class ApplicationAdapter extends RESTAdapter {
urlForQueryRecord({ slug }, modelName) {
let baseUrl = this.buildURL();
return ${baseUrl}/${encodeURIComponent(slug)}
;
}
}
Parameters:
-
query
Object -
modelName
String
Returns:
url
urlForUpdateRecord
-
id
-
modelName
-
snapshot
Builds a URL for a record.save()
call when the record has been updated locally.
Example:
import RESTAdapter from '@ember-data/adapter/rest';
export default class ApplicationAdapter extends RESTAdapter {
urlForUpdateRecord(id, modelName, snapshot) {
return /${id}/feed?access_token=${snapshot.adapterOptions.token}
;
}
}
Parameters:
-
id
String -
modelName
String -
snapshot
Snapshot
Returns:
url
urlPrefix
-
path
-
parentURL
Parameters:
-
path
String -
parentURL
String
Returns:
urlPrefix