7.9 Models -- Connection to An HTTP Server
一、概述
1. 如果你的Ember应用程序需要从一个HTTP服务器加载JSON数据,在你的服务器返回的任何格式中,配置Ember Data的过程将会加载records。
2. store使用一个被称为adapter的对象去了解如何与网络通信。默认的,store将会使用DS.RESTAdapter,它是一个adapter,它通过转换经由XHR的JSON与一个HTTP服务器通信。
3. 这节的内容被分为两部分。第一部分涵盖了一个适配器的默认行为,包括请求records将访问哪些URLS和期望返回什么格式的JSON。
4. 第二部分涵盖了如何重写这些默认的设置去自定义一些事情,例如哪些URLs数据被请求和JSON数据是如何被组织的。
二、URL Conventions
1. 这个REST适配器使用model的名字来确定什么URL发送JSON。
例如,如果你通过一个ID请求一条photo record:
app/routes/photo.js
export default Ember.Route.extend({
model: function(params) {
return this.store.findRecord('photo', params.photo_id);
}
});
这个REST适配器将会自动发送一个GET请求到/photos/1。
2. 你可以采取的action,在REST适配器中,映射到下面的URL:
| Action | HTTP Verb | URL |
|---|---|---|
| Find Record | GET | /posts/123 |
| Find All | GET | /posts |
| Update | PUT | /posts/123 |
| Create | POST | /posts |
| Delete | DELETE | /posts/123 |
三、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"
}]
}
四、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版本,同时在每一个模型的基础上与不同的域进行交互。
五、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
7.9 Models -- Connection to An HTTP Server的更多相关文章
- SQL Server 2012 The report server cannot open a connection to the report server database
案例环境: 操作系统版本: Windows Server 2012 R2 Standard 数据库版本 : SQL SERVER 2012 SP2 案例介绍: 今天进入一台新安装的SQL ...
- MS SQL错误:SQL Server failed with error code 0xc0000000 to spawn a thread to process a new login or connection. Check the SQL Server error log and the Windows event logs for information about possible related problems
早晨宁波那边的IT人员打电话告知数据库无法访问了.其实我在早晨也发现Ignite监控下的宁波的数据库服务器出现了异常,但是当时正在检查查看其它服务器发过来的各类邮件,还没等到我去确认具体情 ...
- Eclipse提交svn错误svn E210003 connection refused by the server
错误明细: org.apache.subversion.javahl.ClientException: svn: E210003: connection refused by the server o ...
- How to Kill All Processes That Have Open Connection in a SQL Server Database[关闭数据库链接 最佳方法] -摘自网络
SQL Server database administrators may frequently need in especially development and test environmen ...
- FtpWebRequest UploadFile返回"The underlying connection was closed: The server committed a protocol violation."解决方法
将FtpWebRequest的KeepAlive设置为true. return Return<Boolean>( new Uri(ftpPath + fileName), request ...
- Unable to open connection to "Microsoft SQL Server, provider V1.0.5000.0 in framework
解决办法:1 以管理员身份登陆2 找到ORACLE_HOME文件夹(D:\oracle\ora92),点右键,选属性——安全,在组或用户栏中选"Authenticated Users&quo ...
- ASP.NET MVC 5 - 创建连接字符串(Connection String)并使用SQL Server LocalDB
您创建的MovieDBContext类负责处理连接到数据库,并将Movie对象映射到数据库记录的任务中.你可能会问一个问题,如何指定它将连接到数据库? 实际上,确实没有指定要使用的数据库,Entity ...
- [转]ASP.NET MVC 5 - 创建连接字符串(Connection String)并使用SQL Server LocalDB
您创建的MovieDBContext类负责处理连接到数据库,并将Movie对象映射到数据库记录的任务中.你可能会问一个问题,如何指定它将连接到数据库? 实际上,确实没有指定要使用的数据库,Entity ...
- 转载:有关SQL server connection KeepAlive 的FAQ
转:http://blogs.msdn.com/b/apgcdsd/archive/2011/05/03/sql-server-connection-keepalive-faq.aspx 1.什么是S ...
随机推荐
- 解决Win7启动时出现“windows未能启动。原因可能是最近更改了硬件或软件”的问题
昨天公司终于大发慈悲,统一更换电脑配置,终于要摆脱“手扶拖拉机”的时代了,赶上“动车时代”了.不过不想换硬盘,因为重新要安装太多东西,环境配置一大堆,所以就硬盘没有换,不过当我开机启动的时候,悲剧发生 ...
- centos 7安装jdk、tomcat
jdk安装 创建上传目录: [root@ckl1 home]# pwd /home [root@ckl1 home]# mkdir upload 安装上传工具: yum install lrzsz 上 ...
- 不同.NET Framework版本下ASP.NET FormsAuthentication的兼容性
假设站点A加密使用.NET Framework 2.0,站点B解密使用.NET Framework 4.0,除了保持MachineKey相同外还需要进行如下设置: 1.Web.config的<a ...
- Coding和Git的环境搭建
Github太慢了.打开网页慢,下载也只有几kb. 于是找了国内的Git,据说coding不错.就申请了个. 其实csdn也有...但是没人家的专业... 1 注册coding https://co ...
- Windows Server 2008 R2之二从介质安装 AD DS
可以使用 Ntdsutil.exe 为在域中创建的其他域控制器创建安装介质.通过从介质安装,可以最大程度地减少网络上目录数据的复制.有利于在远程站点中更高效地安装其他域控制器. 实验环境: 在Wind ...
- inline-blcok 之间的空白间隙
前言: inline-blcok 布局时,通常情况下, inline-blocks 之间有空白,尽管通常我们是不想要的,毕竟不像padding或者margin一样好控制,如图: <div cla ...
- HTML表单的运用
没学习HTML表单之前,觉得文本框.密码框.隐藏域.单选按钮.复选框等这些在平常页面常见到的表单不起眼,挺简单,到自己用代码区实现将它们灵活串联运用起来,才发现一点都不简单.看着容易,自己操作还是出现 ...
- MySQLCouldn't find MySQL manager
mysql出现MySQLCouldn't find MySQL manager错误的解决办法 最近我的一个linux服务器上的网站全部无法打开.....访问网站没有提示.....只出现该页无法显示的错 ...
- POJ-2336 Ferry Loading II(简单DP)
Ferry Loading II Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3763 Accepted: 1919 Desc ...
- Linux系统下便捷使用中国知网的方式
https://blog.csdn.net/mowangajimide/article/details/54144379