for*_*rtm 1 ember.js ember-data postgrest
如果我们必须将ember-data及其save()和find()方法与postgrest样式的REST调用集成,那么ember-data本身就能理解json-api,我们需要在哪里进行更改?
我们是否需要在ember或某些服务器端逻辑中修改客户端,以便与ember-data要求进行映射.
因此,最后的REST api调用看起来像是从相关表格中获取电影及其标题和competition.name - >
http://localhost:3001/film?select=title,competition{name}
http://localhost:3001/users?select=email::text&id=eq.2&sign_in_count=eq.16
Run Code Online (Sandbox Code Playgroud)
这里有两个问题:
第一个问题实际上是一个偏好问题.我个人更喜欢让服务器发出并接受JSON API格式,因为它允许您向客户端发送更少的JavaScript行,并且多个客户端倾向于与同一服务器通信,因此标准化可以加快客户端应用程序的开发速度.
例如,您可能有两个Ember客户端(一个面向用户,一个面向管理员),一个iOS客户端,也许还有另一个服务器请求您的PostgREST服务器.
也就是说,您也可以考虑PostgREST使用的格式作为自己的规范,并让所有客户端都遵守该格式.
这让我们回答问题2:如何使Ember Data与不使用JSON API标准的服务器通信?
适配器将对数据的请求转换为适当的URL,在该URL中可以找到(或添加)数据并发起请求.
因此,"给我ID为22的照片"(store.find('photo', 2)
),会问适配器(假设照片#2尚未加载),"嘿,有人想要照片#2,请去取它".
适配器将发出请求并将响应交给其Serializer.
Serializer负责将返回的数据转换为Ember Data理解的格式:JSON API.
Adapter和Serializer都有可以实现的方法来自定义它们的行为.
对于PostgREST,最好的起点是findRecord
在Adapter上实现自己的,normalizeResponse
并在Serializer上实现自己的.
两者的文档都解释了您需要采取的操作以及应从每种方法返回的值的类型.
这是两个最基本的接口.它们不提供开箱即用的许多功能,但可以帮助您熟悉这两个对象的交互方式.
一旦您对此基本交互感到满意,请查看示例RestAdapter和RestSerializer,了解如何依赖某些约定,适配器和序列化程序必须提供清理您编写的任何自定义代码.