• 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:

    ActionHTTP VerbURL
    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
  • 相关阅读:
    AHP
    常用积分公式
    关于纸张尺寸和照片尺寸
    学历学位知多少?
    C++ 类型转换的实现
    CDDIS网站下 GNSS 相关的数据产品下载+命名方式解读+文件格式说明文件下载地址
    windows 获取pc信息
    shell 数组操作
    net use远程重启服务器
    获取邮箱使用情况、以及最后一次logon时间
  • 原文地址:https://www.cnblogs.com/sunshineground/p/5165980.html
Copyright © 2020-2023  润新知