1、概述html
1. 若是你的Ember應用程序須要從一個HTTP服務器加載JSON數據,在你的服務器返回的任何格式中,配置Ember Data的過程將會加載records。html5
2. store使用一個被稱爲adapter的對象去了解如何與網絡通訊。默認的,store將會使用DS.RESTAdapter,它是一個adapter,它經過轉換經由XHR的JSON與一個HTTP服務器通訊。ajax
3. 這節的內容被分爲兩部分。第一部分涵蓋了一個適配器的默認行爲,包括請求records將訪問哪些URLS和指望返回什麼格式的JSON。api
4. 第二部分涵蓋了如何重寫這些默認的設置去自定義一些事情,例如哪些URLs數據被請求和JSON數據是如何被組織的。跨域
2、URL Conventions瀏覽器
1. 這個REST適配器使用model的名字來肯定什麼URL發送JSON。服務器
例如,若是你經過一個ID請求一條photo record:網絡
app/routes/photo.jsapp
export default Ember.Route.extend({ model: function(params) { return this.store.findRecord('photo', params.photo_id); } });
這個REST適配器將會自動發送一個GET請求到/photos/1。
2. 你能夠採起的action,在REST適配器中,映射到下面的URL:cors
Action | HTTP Verb | URL |
---|---|---|
Find Record | GET | /posts/123 |
Find All | GET | /posts |
Update | PUT | /posts/123 |
Create | POST | /posts |
Delete | DELETE | /posts/123 |
3、JSON Conventions
假定以下models:
app/models/post.js
import DS from 'ember-data'; export default DS.Model.extend({ title: DS.attr(), comments: DS.hasMany('comment'), user: DS.belongsTo('user') });
app/models/comment.js
import DS from 'ember-data'; export default DS.Model.extend({ body: DS.attr() });
Ember Data指望一個到/posts/1的Get請求將會返回以下格式的JSON:
{ "post": { "id": 1, "title": "Rails is omakase", "comments": ["1", "2"], "user" : "dhh" }, "comments": [{ "id": "1", "body": "Rails is unagi" }, { "id": "2", "body": "Omakase O_o" }] }
4、Customizing the adapter
1. 爲了 自定義這個REST適配器,建立一個app/adapters/application.js文件而且導出一個DS.RESTAdapter的子類。而後你能夠重寫它的屬性和方法來自定義records是如何被檢索和保存的。
app/adapters/application.js
export default DS.RESTAdapter.extend({ ... });
2. Customizing a specific model
徹底有可能,你須要爲一個model定義options,而不是一個應用程序範圍的自定義。在這種狀況下,你能夠建立一個以指定的模型命名的適配器。
app/adapters/post.js
export default DS.RESTAdapter.extend({ namespace: 'api/v2', host: 'https://api.example2.com' });
app/adapters/photo.js
export default DS.RESTAdapter.extend({ namespace: 'api/v1', host: 'https://api.example.com' });
這容許你輕鬆連接到多個API版本,同時在每個模型的基礎上與不一樣的域進行交互。
5、Customizing URLS
1. URL Prefix
若是你的JSON API在其餘地方而不是在host root,你能夠設置一個前綴,它能夠被添加到全部的請求。例如,若是你正在使用一個JSON API,一個請求特殊的person可能會訪問/api/v1/people/1。在這種狀況下,設置namespace屬性爲api/v1。
app/adapters/application.js
export default DS.RESTAdapter.extend({ namespace: 'api/v1' });
用ID爲1請求一個person如今將會訪問到/api/v1/people/1。
2. URL Host
若是你的JSON API運行在服務於你的Ember app不一樣的域上而不是一個,你能夠改變host用來發送HTTP請求。
注意爲了使它有效,你須要使用一個支持 CORS(跨域訪問)的瀏覽器,而且你的服務器須要被配置去發送正確的CORS頭。
爲了改變這個請求被髮送到的host,設置host屬性:
app/adapters/application.js
export default DS.RESTAdapter.extend({ host: 'https://api.example.com' });
使用ID爲1請求一個person,如今將會導航到https://api.example.com/people/1。
3. Custom HTTP Headers
一些APIs請求HTTP頭,例如,提供一個API key。任意頭能夠被設定爲key/value對,在RESTAdapter的headers屬性中而且Ember Data將會隨着每一次ajax請求發送它們。
例如:
app/adapters/application.js
export default DS.RESTAdapter.extend({ headers: { 'API_KEY': 'secret key', 'ANOTHER_HEADER': 'Some header value' } });
請求任何資源將會包括下面的HTTP頭:
ANOTHER_HEADER: Some header value
API_KEY: secret key