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