【发布时间】:2014-08-07 11:38:59
【问题描述】:
我正在用 Durandal 2.1 编写一个 SPA。到现在为止还挺好。但是,我在选择正确的 Data Persistence 库来与我的 PHP (Laravel) REST API 进行通信时遇到了很大的困难。
Durandal 的第一大库是 BreezeJS。据说它支持 API 的 without oData / ASP.NET Entity 框架。我已经搜索了很多天,但找不到任何像样的资源来告诉我如何将 BreezeJS 与我的基本 PHP REST API 一起使用。
愿望清单如下:
- 在视图之间保留数据
- 验证模型
- 状态跟踪(又名 isDirty / cancelChanges)
- GET/POST/PUT/DELETE 使用 REST API 调用(在 PUT 的情况下,只发送脏东西)
REST API 如下。我将使用联系人 + 地址 + 国家模型结构来解释我的 API 是如何工作的。
- 联系多对多地址
- 地址 belongs-to 国家又名 Country 拥有许多地址
以下 GET 请求:
GET /api/v1/contacts
+ Payload:
{
append_addresses : 1, // add addresses as nested data
append_addresses_country : 1, // add country as nested data of addresses
stack : 2, // return no more than 2 contacts (e.g. for pagination)
page : 1, // return the first page (so the first 2 contacts)
count : 1 // return the total number of existing contacts
}
返回以下结果:
{
"total": 100,
"data": [
{
"id": 1,
"name": "Turner PLC",
"addresses": [
{
"id" : 214,
"country_id" : 1,
"city" : "North Jason",
"country" : {
"id" : 1,
"name" : "Canada"
}
},
{
"id" : 203,
"country_id" : 2,
"city" : "West Lafayette",
"country" : {
"id" : 2,
"name" : "The Netherlands"
}
}
]
}
]
}
API 支持 2 种使用 POST/PUT 的方式:
POST/PUT 数据的结构与上面“数据”属性下显示的结构相同。基于模型的
id,后端将决定是否需要创建或更新模型。后端还会根据提供的有效负载自动检测是否需要创建/更新/删除关系。很酷吧? :-)POST /api/v1/entities...
...具有以下有效负载:
[
{
"type" : "Contact",
"data" : {
"id" : null, // Will create a new Contact
"name" : "Malaysia"
}
},
{
"type" : "Contact",
"data" : {
"id" : 1, // Will update existing Contact
"name" : "Turner Example"
}
},
{
"type" : "Address",
"data" : {
"id" : 203, // Will update existing Address
"city" : "South Jason",
"contacts_id" : [1,3,5] // Will set/update the many-to-many relationship between Address ID 203 and Contact ID 1, 3 and 5
}
}
]
现在我的问题是:
这可以在 BreezeJS 中完成,还是我应该考虑使用 JayData 或 Waterline 之类的替代方法?
BreezeJS 似乎坚持使用类似查询的语法。我错过了它的目的还是没用?如果是这样,是否可以省略类似语法的查询并仍然使用 BreezeJS 或替代方法?
BreezeJS(或替代方案)将如何处理 hasOne、hasMany、belongsTo 和 belongsToMany 以及多态关系?
是否存在与我的类似用例的“入门”?我已经阅读了很多关于 BreezeJS 及其替代品的文章,但是我还没有想到拼图的各个部分。换句话说,我完全迷失了。
【问题讨论】:
标签: php laravel sails.js breeze waterline