Class DS.JSONAPISerializer
Extends: | DS.JSONSerializer |
---|---|
Defined in: | addon/serializers/json-api.js:15 |
Module: | ember-data |
Since: | v1.13.0 |
Ember Data 2.0 Serializer:
In Ember Data a Serializer is used to serialize and deserialize records when they are transferred in and out of an external source. This process involves normalizing property names, transforming attribute values and serializing relationships.
JSONAPISerializer
supports the http://jsonapi.org/ spec and is the serializer recommended by Ember Data.
This serializer normalizes a JSON API payload that looks like:
app/models/player.js
import DS from 'ember-data'; export default DS.Model.extend({ name: DS.attr('string'), skill: DS.attr('string'), gamesPlayed: DS.attr('number'), club: DS.belongsTo('club') });
app/models/club.js
import DS from 'ember-data'; export default DS.Model.extend({ name: DS.attr('string'), location: DS.attr('string'), players: DS.hasMany('player') });
{ "data": [ { "attributes": { "name": "Benfica", "location": "Portugal" }, "id": "1", "relationships": { "players": { "data": [ { "id": "3", "type": "players" } ] } }, "type": "clubs" } ], "included": [ { "attributes": { "name": "Eusebio Silva Ferreira", "skill": "Rocket shot", "games-played": 431 }, "id": "3", "relationships": { "club": { "data": { "id": "1", "type": "clubs" } } }, "type": "players" } ] }
to the format that the Ember Data store expects.
Customizing meta
Since a JSON API Document can have meta defined in multiple locations you can use the specific serializer hooks if you need to customize the meta.
One scenario would be to camelCase the meta keys of your payload. The example below shows how this could be done using normalizeArrayResponse
and extractRelationship
.
app/serializers/application.js
export default JSONAPISerializer.extend({ normalizeArrayResponse(store, primaryModelClass, payload, id, requestType) { let normalizedDocument = this._super(...arguments); // Customize document meta normalizedDocument.meta = camelCaseKeys(normalizedDocument.meta); return normalizedDocument; }, extractRelationship(relationshipHash) { let normalizedRelationship = this._super(...arguments); // Customize relationship meta normalizedRelationship.meta = camelCaseKeys(normalizedRelationship.meta); return normalizedRelationship; } });
Methods
- extractAttributes
- extractErrors
- extractId
- extractMeta
- extractPolymorphicRelationship
- extractRelationship
- extractRelationships
- keyForAttribute
- keyForLink
- keyForRelationship
- modelNameFromPayloadKey
- modelNameFromPayloadType
- normalize
- normalizeArrayResponse
- normalizeCreateRecordResponse
- normalizeDeleteRecordResponse
- normalizeFindAllResponse
- normalizeFindBelongsToResponse
- normalizeFindHasManyResponse
- normalizeFindManyResponse
- normalizeFindRecordResponse
- normalizeQueryRecordResponse
- normalizeQueryResponse
- normalizeResponse
- normalizeSaveResponse
- normalizeSingleResponse
- normalizeUpdateRecordResponse
- payloadKeyFromModelName
- payloadTypeFromModelName
- pushPayload
- serialize
- serializeAttribute
- serializeBelongsTo
- serializeHasMany
- serializeId
- serializeIntoHash
- serializePolymorphicType
- shouldSerializeHasMany
Properties
Events
No documented items
© 2020 Yehuda Katz, Tom Dale and Ember.js contributors
Licensed under the MIT License.
https://api.emberjs.com/ember-data/2.18/classes/DS.JSONAPISerializer