一、概述

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/1Get请求将会返回如下格式的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对,在RESTAdapterheaders属性中并且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的更多相关文章

  1. 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 ...

  2. 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监控下的宁波的数据库服务器出现了异常,但是当时正在检查查看其它服务器发过来的各类邮件,还没等到我去确认具体情 ...

  3. Eclipse提交svn错误svn E210003 connection refused by the server

    错误明细: org.apache.subversion.javahl.ClientException: svn: E210003: connection refused by the server o ...

  4. 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 ...

  5. FtpWebRequest UploadFile返回"The underlying connection was closed: The server committed a protocol violation."解决方法

    将FtpWebRequest的KeepAlive设置为true. return Return<Boolean>( new Uri(ftpPath + fileName), request ...

  6. 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 ...

  7. ASP.NET MVC 5 - 创建连接字符串(Connection String)并使用SQL Server LocalDB

    您创建的MovieDBContext类负责处理连接到数据库,并将Movie对象映射到数据库记录的任务中.你可能会问一个问题,如何指定它将连接到数据库? 实际上,确实没有指定要使用的数据库,Entity ...

  8. [转]ASP.NET MVC 5 - 创建连接字符串(Connection String)并使用SQL Server LocalDB

    您创建的MovieDBContext类负责处理连接到数据库,并将Movie对象映射到数据库记录的任务中.你可能会问一个问题,如何指定它将连接到数据库? 实际上,确实没有指定要使用的数据库,Entity ...

  9. 转载:有关SQL server connection KeepAlive 的FAQ

    转:http://blogs.msdn.com/b/apgcdsd/archive/2011/05/03/sql-server-connection-keepalive-faq.aspx 1.什么是S ...

随机推荐

  1. Android studio快捷键设置

    Android Studio格式化代码设置和代码风格设置.代码提示键  http://blog.csdn.net/u010156024/article/details/48207145 Android ...

  2. tar解压包的时候出现错误 gzip: stdin: not in gzip format

    在Linux环境下,通过tar -zxvf 命令解压文件时遇到”gzip: stdin: not in gzip format“等错误:如图所示 root@cmfchina:/usr/java# ta ...

  3. 监控redis服务器执行的命令--类似于tomcat的local-access.log

    一.问题由来 一般程序启动时会去拉必要的缓存存进去redis. 由于我们这边开发可直连开发和测试环境,有时候会发生,开发同学本地直连了测试环境,本地ide一启动,可能会导致重新覆盖了测试环境上的缓存. ...

  4. Rope整理(可持久化神器)

    rope是什么?STL的内置的可持久化的数组.其最为方便的就是可以O1复制原来的数组.事实上rope的内置实现也是平衡树,由于只需要复制根结点,O1可以做到复制历史版本. 然而这个东西常数特大,不开O ...

  5. Azure Redis 缓存的 ASP.NET 会话状态提供程序

    Azure Redis Cache 提供了一个会话状态提供程序,你可以使用其在缓存中(而不是内存中或在 SQL Server 数据库中)存储会话状态.要使用缓存会话状态提供程序,先首先配置缓存,然后使 ...

  6. Linux批量杀死进程

    杀死进程在linux中使用kill命令了,我们可以下面来给各位介绍一篇关于Linux下批量杀死进程的例子,希望此例子可以对各位同学带来帮助的哦. 批量杀死包含关键字“php-fpm”的进程. kill ...

  7. 【CF845F】Guards In The Storehouse 插头DP

    [CF845F]Guards In The Storehouse 题意:一个n*m的房间,每个格子要么是障碍要么是空地.对于每个空地你可以选择放或者不放守卫.一个守卫能保护到的位置是:他右面的一行空地 ...

  8. python nose测试框架全面介绍八---接口测试中非法参数的断言

    在测接口时,会有这样的场景,输入非法的参数,校验返回的错误码及错误内容 通常做法为发请求,将错误的返回结果拿出,再进行对比匹配:但存在一个问题,需要再写错误返回分析函数,不能与之前正常发请求的函数共用 ...

  9. Android studio was unable to create a local connection in order...

    以管理员身份运行cmd 输入netsh winsock reset 重启电脑

  10. split陷阱

    如果split最后一个为空,则要这么写 String[] lines=line.split(",",-1);