{"action":"created","comment":{"url":"https://api.github.com/repos/emberjs/guides/pulls/comments/39662605","id":39662605,"diff_hunk":"@@ -0,0 +1,556 @@\n+## Serializers\n+\n+In Ember Data the Serializer is a class that is responsible for\n+transforming the data returned by you adapter into a JSON API document\n+that Ember Data can understand. Serializers can be customized to work\n+with any backend. By default, Ember Data ships with 3 Serializers. The\n+`JSONAPISerializer` is the default serializer and works with JSON API\n+backends. The `JSONSerializer` is a simple serializer for working with\n+single json object or arrays of records. The `RESTSerializer` is a\n+more complex serializer that supports sideloading and was the default\n+serializer before 2.0.\n+\n+### JSONAPISerializer Conventions\n+\n+When requesting a record, the `JSONAPISerializer` expects your server\n+to return a JSON representation of the record that conforms to the\n+following conventions.\n+\n+\n+#### JSON API Document\n+\n+The JSONAPI serializer expects the backend to return a JSON API\n+Document that follows the JSON API specification and the conventions\n+of the examples found on http://jsonapi.org/format/. This means all\n+type names should be pluralized and attribute and relationship names\n+should be dash-cased. For example, if you request a record from\n+`/people/123`, the response should looks like this:\n+\n+```js\n+{\n+  \"data\": {\n+    \"type\": \"people\",\n+    \"id\": 123,\n+    attributes: {\n+      \"first-name\": \"Jeff\",\n+      \"last-name\": \"Atwood\"\n+    }\n+  }\n+}\n+```\n+\n+A response that contains multiple records may have an array in its\n+`data` property.\n+\n+```js\n+{\n+  \"data\": [{\n+    \"type\": \"people\",\n+    \"id\": 123,\n+    attributes: {\n+      \"first-name\": \"Jeff\",\n+      \"last-name\": \"Atwood\"\n+    }\n+  }, {\n+    \"type\": \"people\",\n+    \"id\": 124,\n+    attributes: {\n+      \"first-name\": \"Yehuda\",\n+      \"last-name\": \"Katz\"\n+    }\n+  }]\n+}\n+```\n+\n+#### Sideloaded Data\n+\n+Data that is not a part of the primary request but includes linked\n+relationships should be placed in an array under the `included`\n+key. For example if you `/people/1` and the backend also returned any\n+comments associated with that relationship the response should look\n+like this:\n+\n+```js\n+{\n+  \"data\": {\n+    \"type\": \"articles\",\n+    \"id\": \"1\",\n+    \"attributes\": {\n+      \"title\": \"JSON API paints my bikeshed!\"\n+    },\n+    \"links\": {\n+      \"self\": \"http://example.com/articles/1\"\n+    },\n+    \"relationships\": {\n+      \"comments\": {\n+        \"data\": [\n+          { \"type\": \"comments\", \"id\": \"5\" },\n+          { \"type\": \"comments\", \"id\": \"12\" }\n+        ]\n+      }\n+    }\n+  }],\n+  \"included\": [{\n+    \"type\": \"comments\",\n+    \"id\": \"5\",\n+    \"attributes\": {\n+      \"body\": \"First!\"\n+    },\n+    \"links\": {\n+      \"self\": \"http://example.com/comments/5\"\n+    }\n+  }, {\n+    \"type\": \"comments\",\n+    \"id\": \"12\",\n+    \"attributes\": {\n+      \"body\": \"I like XML better\"\n+    },\n+    \"links\": {\n+      \"self\": \"http://example.com/comments/12\"\n+    }\n+  }]\n+}\n+```\n+\n+### Customizing Serializers\n+\n+Ember Data uses the `JSONAPISerializer` by default, however, you can\n+override this default by defining a custom serializer. There are two\n+ways to define a custom serializer. First, you can define a custom\n+serializer for you entire application by defining an \"application\"\n+serializer.\n+\n+```app/serializers/application.js\n+import DS from 'ember-data';\n+\n+export default DS.JSONSerializer.extend({});\n+```\n+\n+You can also define serializer for a specific model. For example if\n+you had a `post` model you could also define a `post` serializer:\n+\n+```app/serializers/post.js\n+import DS from 'ember-data';\n+\n+export default DS.JSONSerializer.extend({});\n+```\n+\n+#### ID\n+\n+In order to keep track of unique records in the store Ember Data\n+expects every record to have an `id` property in the payload. Ids\n+should be unique for every unique record of a specific type. If your\n+backend used a different key other then `id` you can use the\n+serializer's `primaryKey` property to correctly transform the id\n+property to `id` when serializing and deserializing data.\n+\n+```app/serializers/application.js\n+export default DS.JSONSerializer.extend({\n+  primaryKey: '_id'\n+});\n+```\n+\n+#### Attribute Names\n+\n+In Ember Data the convention is to camelize attribute names on a\n+model. For example:\n+\n+```app/models/person.js\n+export default DS.Model.extend({\n+  firstName: DS.attr('string'),\n+  lastName:  DS.attr('string'),\n+\n+  isPersonOfTheYear: DS.attr('boolean')\n+});\n+```\n+\n+However, the `JSONAPISerializer` expects attributes to be dasherized\n+in the document payload returned by your server:\n+\n+```js\n+{\n+  \"data\": {\n+    \"id\": 44,\n+    \"type\": \"people\",\n+    \"attributes\": {\n+      \"first-name\": \"Barack\",\n+      \"last-name\": \"Obama\",\n+      \"is-person-of-the-year\": true\n+    }\n+  }\n+}\n+```\n+\n+If the attributes returned by your server use a different convention\n+you can use the serializer's `keyForAttribute` method to convert an\n+attribute name in your model to a key in your JSON payload. For\n+example, if your backend returned attributes that are `under_scored`\n+instead of `dash-cased` you could override the `keyForAttribute`\n+method like this.\n+\n+```app/serializers/application.js\n+export default DS.JSONAPISerializer.extend({\n+  keyForAttribute: function(attr) {\n+    return Ember.String.underscore(attr);\n+  }\n+});\n+```\n+\n+Irregular keys can be mapped with a custom serializer. The `attrs`\n+object can be used to declare a simple mapping between property names\n+on DS.Model records and payload keys in the serialized JSON object\n+representing the record. An object with the property key can also be\n+used to designate the attribute's key on the response payload.\n+\n+\n+If the JSON for `person` has a key of `lastNameOfPerson`, and the\n+desired attribute name is simply `lastName`, then create a custom\n+Serializer for the model and override the `attrs` property.\n+\n+```app/models/person.js\n+export default DS.Model.extend({\n+  lastName: DS.attr('string')\n+});\n+```\n+\n+```app/serializers/person.js\n+export default DS.JSONAPISerializer.extend({\n+  attrs: {\n+    lastName: 'lastNameOfPerson',\n+  }\n+});\n+```\n+\n+#### Relationships\n+\n+References to other records should be done by ID. For example, if you\n+have a model with a `hasMany` relationship:\n+\n+```app/models/post.js\n+export default DS.Model.extend({\n+  comments: DS.hasMany('comment', { async: true })\n+});\n+```\n+\n+The JSON should encode the relationship as an array of IDs and types:\n+\n+```js\n+{\n+  \"data\": {\n+    \"type\": \"posts\",\n+    \"id\": \"1\",\n+    \"relationships\": {\n+      \"comments\": {\n+        \"data\": [\n+          { \"type\": \"comments\", \"id\": \"5\" },\n+          { \"type\": \"comments\", \"id\": \"12\" }\n+        ]\n+      }\n+    }\n+  }\n+}\n+```\n+\n+`Comments` for a `post` can be loaded by `post.get('comments')`. The\n+REST adapter will send 3 `GET` request to `/comments/1/`,\n+`/comments/2/` and `/comments/3/`.\n+\n+Any `belongsTo` relationships in the JSON representation should be the\n+dasherized version of the propertie's name. For example, if you have\n+a model:\n+\n+```app/models/comment.js\n+export default DS.Model.extend({\n+  originalPost: DS.belongsTo('post')\n+});\n+```\n+\n+The JSON should encode the relationship as an ID to another record:\n+\n+```js\n+{\n+  \"data\": {\n+    \"type\": \"comment\",\n+    \"id\": \"1\",\n+    \"relationships\": {\n+      \"original-post\": {\n+        \"data\": { \"type\": \"post\", \"id\": \"5\" },\n+      }\n+    }\n+  }\n+}\n+```\n+If needed these naming conventions can be overwritten by implementing\n+the `keyForRelationship` method.\n+\n+```app/serializers/application.js\n+export default DS.JSONAPISerializer.extend({\n+  keyForRelationship: function(key, relationship) {\n+    return key + 'Ids';\n+  }\n+});\n+```\n+\n+\n+#### Creating Custom Transformations\n+\n+In some circumstances, the built in attribute types of `string`,\n+`number`, `boolean`, and `date` may be inadequate. For example, a\n+server may return a non-standard date format.\n+\n+Ember Data can have new JSON transforms\n+registered for use as attributes:\n+\n+```app/transforms/coordinate-point.js\n+export default DS.Transform.extend({\n+  serialize: function(value) {\n+    return [value.get('x'), value.get('y')];\n+  },\n+  deserialize: function(value) {\n+    return Ember.create({ x: value[0], y: value[1] });\n+  }\n+});\n+```\n+\n+```app/models/cursor.js\n+export default DS.Model.extend({\n+  position: DS.attr('coordinatePoint')\n+});\n+```\n+\n+When `coordinatePoint` is received from the API, it is\n+expected to be an array:\n+\n+```js\n+{\n+  cursor: {\n+    position: [4,9]\n+  }\n+}\n+```\n+\n+But once loaded on a model instance, it will behave as an object:\n+\n+```js\n+var cursor = App.Cursor.find(1);","path":"source/models/customizing-serializers.md","position":335,"original_position":335,"commit_id":"2778d38bb9d99e5300ffaa869c0f6d2af6013146","original_commit_id":"2778d38bb9d99e5300ffaa869c0f6d2af6013146","user":{"login":"wecc","id":708205,"avatar_url":"https://avatars.githubusercontent.com/u/708205?v=3","gravatar_id":"","url":"https://api.github.com/users/wecc","html_url":"https://github.com/wecc","followers_url":"https://api.github.com/users/wecc/followers","following_url":"https://api.github.com/users/wecc/following{/other_user}","gists_url":"https://api.github.com/users/wecc/gists{/gist_id}","starred_url":"https://api.github.com/users/wecc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wecc/subscriptions","organizations_url":"https://api.github.com/users/wecc/orgs","repos_url":"https://api.github.com/users/wecc/repos","events_url":"https://api.github.com/users/wecc/events{/privacy}","received_events_url":"https://api.github.com/users/wecc/received_events","type":"User","site_admin":false},"body":"`store.findRecord()` instead of global?","created_at":"2015-09-16T17:53:14Z","updated_at":"2015-09-16T17:53:14Z","html_url":"https://github.com/emberjs/guides/pull/733#discussion_r39662605","pull_request_url":"https://api.github.com/repos/emberjs/guides/pulls/733","_links":{"self":{"href":"https://api.github.com/repos/emberjs/guides/pulls/comments/39662605"},"html":{"href":"https://github.com/emberjs/guides/pull/733#discussion_r39662605"},"pull_request":{"href":"https://api.github.com/repos/emberjs/guides/pulls/733"}}},"pull_request":{"url":"https://api.github.com/repos/emberjs/guides/pulls/733","id":44951406,"html_url":"https://github.com/emberjs/guides/pull/733","diff_url":"https://github.com/emberjs/guides/pull/733.diff","patch_url":"https://github.com/emberjs/guides/pull/733.patch","issue_url":"https://api.github.com/repos/emberjs/guides/issues/733","number":733,"state":"open","locked":false,"title":"WIP Update the Models section of the guides","user":{"login":"bmac","id":54056,"avatar_url":"https://avatars.githubusercontent.com/u/54056?v=3","gravatar_id":"","url":"https://api.github.com/users/bmac","html_url":"https://github.com/bmac","followers_url":"https://api.github.com/users/bmac/followers","following_url":"https://api.github.com/users/bmac/following{/other_user}","gists_url":"https://api.github.com/users/bmac/gists{/gist_id}","starred_url":"https://api.github.com/users/bmac/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bmac/subscriptions","organizations_url":"https://api.github.com/users/bmac/orgs","repos_url":"https://api.github.com/users/bmac/repos","events_url":"https://api.github.com/users/bmac/events{/privacy}","received_events_url":"https://api.github.com/users/bmac/received_events","type":"User","site_admin":false},"body":"cc @locks @michaelrkn @igorT ","created_at":"2015-09-14T16:31:14Z","updated_at":"2015-09-16T17:53:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"37c5ebda2deca184a63771b0b7ea9cf2ef75ae6d","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/emberjs/guides/pulls/733/commits","review_comments_url":"https://api.github.com/repos/emberjs/guides/pulls/733/comments","review_comment_url":"https://api.github.com/repos/emberjs/guides/pulls/comments{/number}","comments_url":"https://api.github.com/repos/emberjs/guides/issues/733/comments","statuses_url":"https://api.github.com/repos/emberjs/guides/statuses/2778d38bb9d99e5300ffaa869c0f6d2af6013146","head":{"label":"bmac:update-models","ref":"update-models","sha":"2778d38bb9d99e5300ffaa869c0f6d2af6013146","user":{"login":"bmac","id":54056,"avatar_url":"https://avatars.githubusercontent.com/u/54056?v=3","gravatar_id":"","url":"https://api.github.com/users/bmac","html_url":"https://github.com/bmac","followers_url":"https://api.github.com/users/bmac/followers","following_url":"https://api.github.com/users/bmac/following{/other_user}","gists_url":"https://api.github.com/users/bmac/gists{/gist_id}","starred_url":"https://api.github.com/users/bmac/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bmac/subscriptions","organizations_url":"https://api.github.com/users/bmac/orgs","repos_url":"https://api.github.com/users/bmac/repos","events_url":"https://api.github.com/users/bmac/events{/privacy}","received_events_url":"https://api.github.com/users/bmac/received_events","type":"User","site_admin":false},"repo":{"id":32989168,"name":"guides","full_name":"bmac/guides","owner":{"login":"bmac","id":54056,"avatar_url":"https://avatars.githubusercontent.com/u/54056?v=3","gravatar_id":"","url":"https://api.github.com/users/bmac","html_url":"https://github.com/bmac","followers_url":"https://api.github.com/users/bmac/followers","following_url":"https://api.github.com/users/bmac/following{/other_user}","gists_url":"https://api.github.com/users/bmac/gists{/gist_id}","starred_url":"https://api.github.com/users/bmac/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bmac/subscriptions","organizations_url":"https://api.github.com/users/bmac/orgs","repos_url":"https://api.github.com/users/bmac/repos","events_url":"https://api.github.com/users/bmac/events{/privacy}","received_events_url":"https://api.github.com/users/bmac/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/bmac/guides","description":"The source for http://guides.emberjs.com","fork":true,"url":"https://api.github.com/repos/bmac/guides","forks_url":"https://api.github.com/repos/bmac/guides/forks","keys_url":"https://api.github.com/repos/bmac/guides/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bmac/guides/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bmac/guides/teams","hooks_url":"https://api.github.com/repos/bmac/guides/hooks","issue_events_url":"https://api.github.com/repos/bmac/guides/issues/events{/number}","events_url":"https://api.github.com/repos/bmac/guides/events","assignees_url":"https://api.github.com/repos/bmac/guides/assignees{/user}","branches_url":"https://api.github.com/repos/bmac/guides/branches{/branch}","tags_url":"https://api.github.com/repos/bmac/guides/tags","blobs_url":"https://api.github.com/repos/bmac/guides/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bmac/guides/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bmac/guides/git/refs{/sha}","trees_url":"https://api.github.com/repos/bmac/guides/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bmac/guides/statuses/{sha}","languages_url":"https://api.github.com/repos/bmac/guides/languages","stargazers_url":"https://api.github.com/repos/bmac/guides/stargazers","contributors_url":"https://api.github.com/repos/bmac/guides/contributors","subscribers_url":"https://api.github.com/repos/bmac/guides/subscribers","subscription_url":"https://api.github.com/repos/bmac/guides/subscription","commits_url":"https://api.github.com/repos/bmac/guides/commits{/sha}","git_commits_url":"https://api.github.com/repos/bmac/guides/git/commits{/sha}","comments_url":"https://api.github.com/repos/bmac/guides/comments{/number}","issue_comment_url":"https://api.github.com/repos/bmac/guides/issues/comments{/number}","contents_url":"https://api.github.com/repos/bmac/guides/contents/{+path}","compare_url":"https://api.github.com/repos/bmac/guides/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bmac/guides/merges","archive_url":"https://api.github.com/repos/bmac/guides/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bmac/guides/downloads","issues_url":"https://api.github.com/repos/bmac/guides/issues{/number}","pulls_url":"https://api.github.com/repos/bmac/guides/pulls{/number}","milestones_url":"https://api.github.com/repos/bmac/guides/milestones{/number}","notifications_url":"https://api.github.com/repos/bmac/guides/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bmac/guides/labels{/name}","releases_url":"https://api.github.com/repos/bmac/guides/releases{/id}","created_at":"2015-03-27T14:00:43Z","updated_at":"2015-04-28T13:14:43Z","pushed_at":"2015-09-14T16:30:06Z","git_url":"git://github.com/bmac/guides.git","ssh_url":"git@github.com:bmac/guides.git","clone_url":"https://github.com/bmac/guides.git","svn_url":"https://github.com/bmac/guides","homepage":null,"size":25345,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":0,"forks":1,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"emberjs:master","ref":"master","sha":"b82c833c99c208416338bcfe5c6133e2d92a52a2","user":{"login":"emberjs","id":1253363,"avatar_url":"https://avatars.githubusercontent.com/u/1253363?v=3","gravatar_id":"","url":"https://api.github.com/users/emberjs","html_url":"https://github.com/emberjs","followers_url":"https://api.github.com/users/emberjs/followers","following_url":"https://api.github.com/users/emberjs/following{/other_user}","gists_url":"https://api.github.com/users/emberjs/gists{/gist_id}","starred_url":"https://api.github.com/users/emberjs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/emberjs/subscriptions","organizations_url":"https://api.github.com/users/emberjs/orgs","repos_url":"https://api.github.com/users/emberjs/repos","events_url":"https://api.github.com/users/emberjs/events{/privacy}","received_events_url":"https://api.github.com/users/emberjs/received_events","type":"Organization","site_admin":false},"repo":{"id":22767401,"name":"guides","full_name":"emberjs/guides","owner":{"login":"emberjs","id":1253363,"avatar_url":"https://avatars.githubusercontent.com/u/1253363?v=3","gravatar_id":"","url":"https://api.github.com/users/emberjs","html_url":"https://github.com/emberjs","followers_url":"https://api.github.com/users/emberjs/followers","following_url":"https://api.github.com/users/emberjs/following{/other_user}","gists_url":"https://api.github.com/users/emberjs/gists{/gist_id}","starred_url":"https://api.github.com/users/emberjs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/emberjs/subscriptions","organizations_url":"https://api.github.com/users/emberjs/orgs","repos_url":"https://api.github.com/users/emberjs/repos","events_url":"https://api.github.com/users/emberjs/events{/privacy}","received_events_url":"https://api.github.com/users/emberjs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/emberjs/guides","description":"The source for http://guides.emberjs.com","fork":false,"url":"https://api.github.com/repos/emberjs/guides","forks_url":"https://api.github.com/repos/emberjs/guides/forks","keys_url":"https://api.github.com/repos/emberjs/guides/keys{/key_id}","collaborators_url":"https://api.github.com/repos/emberjs/guides/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/emberjs/guides/teams","hooks_url":"https://api.github.com/repos/emberjs/guides/hooks","issue_events_url":"https://api.github.com/repos/emberjs/guides/issues/events{/number}","events_url":"https://api.github.com/repos/emberjs/guides/events","assignees_url":"https://api.github.com/repos/emberjs/guides/assignees{/user}","branches_url":"https://api.github.com/repos/emberjs/guides/branches{/branch}","tags_url":"https://api.github.com/repos/emberjs/guides/tags","blobs_url":"https://api.github.com/repos/emberjs/guides/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/emberjs/guides/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/emberjs/guides/git/refs{/sha}","trees_url":"https://api.github.com/repos/emberjs/guides/git/trees{/sha}","statuses_url":"https://api.github.com/repos/emberjs/guides/statuses/{sha}","languages_url":"https://api.github.com/repos/emberjs/guides/languages","stargazers_url":"https://api.github.com/repos/emberjs/guides/stargazers","contributors_url":"https://api.github.com/repos/emberjs/guides/contributors","subscribers_url":"https://api.github.com/repos/emberjs/guides/subscribers","subscription_url":"https://api.github.com/repos/emberjs/guides/subscription","commits_url":"https://api.github.com/repos/emberjs/guides/commits{/sha}","git_commits_url":"https://api.github.com/repos/emberjs/guides/git/commits{/sha}","comments_url":"https://api.github.com/repos/emberjs/guides/comments{/number}","issue_comment_url":"https://api.github.com/repos/emberjs/guides/issues/comments{/number}","contents_url":"https://api.github.com/repos/emberjs/guides/contents/{+path}","compare_url":"https://api.github.com/repos/emberjs/guides/compare/{base}...{head}","merges_url":"https://api.github.com/repos/emberjs/guides/merges","archive_url":"https://api.github.com/repos/emberjs/guides/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/emberjs/guides/downloads","issues_url":"https://api.github.com/repos/emberjs/guides/issues{/number}","pulls_url":"https://api.github.com/repos/emberjs/guides/pulls{/number}","milestones_url":"https://api.github.com/repos/emberjs/guides/milestones{/number}","notifications_url":"https://api.github.com/repos/emberjs/guides/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/emberjs/guides/labels{/name}","releases_url":"https://api.github.com/repos/emberjs/guides/releases{/id}","created_at":"2014-08-08T18:25:02Z","updated_at":"2015-09-15T18:07:35Z","pushed_at":"2015-09-16T17:31:54Z","git_url":"git://github.com/emberjs/guides.git","ssh_url":"git@github.com:emberjs/guides.git","clone_url":"https://github.com/emberjs/guides.git","svn_url":"https://github.com/emberjs/guides","homepage":null,"size":29849,"stargazers_count":130,"watchers_count":130,"language":"CSS","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":349,"mirror_url":null,"open_issues_count":41,"forks":349,"open_issues":41,"watchers":130,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/emberjs/guides/pulls/733"},"html":{"href":"https://github.com/emberjs/guides/pull/733"},"issue":{"href":"https://api.github.com/repos/emberjs/guides/issues/733"},"comments":{"href":"https://api.github.com/repos/emberjs/guides/issues/733/comments"},"review_comments":{"href":"https://api.github.com/repos/emberjs/guides/pulls/733/comments"},"review_comment":{"href":"https://api.github.com/repos/emberjs/guides/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/emberjs/guides/pulls/733/commits"},"statuses":{"href":"https://api.github.com/repos/emberjs/guides/statuses/2778d38bb9d99e5300ffaa869c0f6d2af6013146"}}}}