【问题标题】:ember-data save and find with postgrestember-data 使用 postgrest 保存和查找
【发布时间】:2017-01-05 12:09:49
【问题描述】:

ember-data 原生理解 json-api,如果我们必须将 ember-data 及其 save() 和 find() 方法与 postgrest 样式的 REST 调用集成,我们需要在哪里进行更改?

我们是否需要修改 ember 中的客户端或某些服务器端逻辑以映射 ember-data 要求。

所以 postgrest REST api 调用看起来像这样从相关表中获取电影及其标题和竞赛名称 ->

http://localhost:3001/film?select=title,competition{name}
http://localhost:3001/users?select=email::text&id=eq.2&sign_in_count=eq.16

【问题讨论】:

    标签: ember.js ember-data postgrest


    【解决方案1】:

    这里有两个问题:

    1. 在服务器或客户端与 JSON API 进行转换是否更好?
    2. 如果在客户端进行转换,与 JSON API 之间的转换发生在哪里?

    在服务器或客户端与 JSON API 进行转换是否更好?

    第一个问题实际上是一个偏好问题。我个人更喜欢让服务器发出和接受 JSON API 格式,因为它允许您向客户端发送更少的 JavaScript 行,并且多个客户端倾向于与同一服务器通信,因此标准化可以加快客户端应用程序的开发。

    例如,您可能有两个 Ember 客户端(一个面向普通用户,一个面向管理员)、一个 iOS 客户端,也许还有另一台服务器都向您的 PostgREST 服务器发出请求。

    也就是说,您也可以将 PostgREST 使用的格式视为自己的规范,并让所有客户端都遵守该规范。

    如果在客户端进行转换,JSON API 的转换发生在哪里?

    这让我们想到了问题 2:如何让 Ember Data 与不使用 JSON API 标准的服务器进行通信?

    这发生在两个地方:AdapterSerializer

    适配器将数据请求转换为可以找到(或添加)数据的适当 URL 并启动请求。

    所以,“给我一张 ID 为 22 的照片”(store.find('photo', 2)),将询问适配器(假设照片 #2 尚未加载),“嘿,有人想要照片 #2,去拿它请”。

    适配器将发出请求并将响应交给其序列化器。

    序列化器负责将返回的数据转换为 Ember Data 可以理解的格式:JSON API。

    Adapter 和 Serializer 都有可以实现的方法来自定义它们的行为。

    在您使用 PostgREST 的情况下,最好的起点是在适配器上实现您自己的 findRecord 并在串行器上实现您自己的 normalizeResponse

    这两个文档都解释了您需要采取的操作以及您应该从每种方法返回什么类型的值。

    这是两个最基本的界面。它们没有提供很多开箱即用的功能,但会帮助您熟悉这两个对象的交互方式。

    一旦您对这种基本交互感到满意,请查看示例 RestAdapterRestSerializer,了解如何依赖适配器和序列化程序必须提供的一些约定来清理您的任何自定义代码书面。

    【讨论】:

    • 非常棒,对 ember-data 的详细深入解释。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 2012-10-16
    相关资源
    最近更新 更多