标签: object-graph

用于更新对象图的REST API设计

我正在设计一个REST API,我正在寻找更新对象图的推荐最佳实践.我的问题最好在一个例子中解释,所以让我说我有一个GET资源如下:

URI:/ people/123

此URI返回如下对象图:

{
    "name":"Johnny",
    "country":{"id":100,"name":"Canada"},
    "likes":[
        {"id":5,"name":"Fruit"},
        {"id":100,"name":"Sports"}
    ]
}
Run Code Online (Sandbox Code Playgroud)

当允许API使用者更新此资源时,您希望通过PUT或PATCH更新对象?更新"name"属性非常简单,但我不确定"country"或"likes",因为消费者只能改变与其他对象的关系而不能创建新对象.

以下是请求更新的一种方法:

{
    "name":"Bob",
    "countryId":200
    "likeIds":[3,10,22]
}
Run Code Online (Sandbox Code Playgroud)

此更新将资源更改为以下内容:

{
    "name":"Bob",
    "country":{"id":200,"name":"United States of America"},
    "likes":[
        {"id":3,"name":"Cars"},
        {"id":10,"name":"Planes"},
        {"id":22,"name":"Real Estate"}
    ]
}
Run Code Online (Sandbox Code Playgroud)

这种设计明确而明确地要求消费者只更新"人物"的"ID",但我担心PUT/PATCH的对象图看起来与GET不同,这使得API难以学习和记忆.所以另一种选择是按如下方式请求PUT/PATCH:

{
    "name":"Bob",
    "country":{"id":100},
    "likes":[
        {"id":3},
        {"id":10},
        {"id":22}
    ]
}
Run Code Online (Sandbox Code Playgroud)

这将产生与先前更新相同的更改,并且不会更改对象图.但是,API消费者并未明确只能更新"ID".

在这种情况下,建议采用哪种方法?

api rest object-graph

13
推荐指数
1
解决办法
1187
查看次数

两个层次结构的单向同步

我希望编写一个算法来同步两个层次结构.这些结构可以是对象图,存储在关系数据库表中的数据等(即使是两个不同的结构,只要它们具有可比较的密钥).同步将是单向的,即一个结构将是原型,另一个将被修改以匹配.

假设我们有一个sync功能.它需要接受以下内容:

  1. objA - 原型
  2. objB - 要修改的对象
  3. keyA - 密钥生成功能 objA
  4. keyB - 密钥生成功能 objB
  5. addB- 创建一个函数objB(返回新的id objB)
  6. setB - 更新功能 objB
  7. remB - 删除功能 objB
  8. parB- objB父级的id - 传递给addB上下文

所以我们有这个:

let sync (objA:'a) (objB:'b) (keyA:'a -> 'k) (keyB:'b -> 'k)
         (addB:'p * 'a -> 'p) (setB:'a * 'b -> unit) (remB:'b -> unit) 
         (parB:'p) = ...
Run Code Online (Sandbox Code Playgroud)

现在这里我遇到了麻烦.'a并且'b是分层的,因此函数需要知道哪些属性'a'b它应该遍历(一旦它比较它们的键并决定它们到目前为止匹配并且应该进一步遍历).对于这些"子"属性,它需要传递给同步的所有相同参数,但是它们各自的类型.

这是显而易见的,这是一个数据结构问题.如何将这些信息链接在一起,以便根对象可以传递给sync它,并且它可以向下遍历图形?我最初的想法是将所有参数合并到一个类中,该类具有子属性(属于 …

merge f# object-graph data-structures

12
推荐指数
1
解决办法
638
查看次数

Android Dagger更新模块外的值

dagger在Android应用程序中使用DI.我可以为模块外的其他类提供变量,但是如何更新它们呢?

示例:登录

我需要一个可以提供用户的AuthenticationModule .当应用程序启动时,用户未登录,因此它为null.但在成功进行身份验证后,LoginActivity需要设置User的值,以便通过AuthenticationModule通过应用程序的其他部分访问它.

简单地设置注入场的值对我来说不起作用.

它甚至可能吗?

android dependency-injection object-graph dagger

12
推荐指数
1
解决办法
3743
查看次数

Java对象图访问者库

你知道一个好的java对象图访问者库吗?

我想访问一个对象及其子组件,并在匹配某些条件时执行一些操作.

用法示例:

  • 在一个巨大的域对象图上,将每个id重置为 null
  • 在一个巨大的域对象图上,用 包含相同元素SetTreeSet实例替换每个.

我想要一个库,而不是自定义代码,因为遍历一个Object图可能很棘手.你必须处理集合,数组,代理等...我已经考虑过重用XStream的一部分来实现这一点,但它看起来并不那么容易:Xstream访问者更倾向于对象转换而不是对象自我修改.

java introspection visitor object-graph

10
推荐指数
1
解决办法
4357
查看次数

合并两个iOS核心数据持久存储的有效方法是什么?

在我们正在开发的应用程序中,我们使用Core Data和sqlite后备存储来存储我们的数据.我们的应用程序的对象模型很复杂.此外,我们的应用程序提供的数据总量太大,无法容纳到iOS(iPhone/iPad/iPod Touch)应用程序包中.由于我们的用户通常只对数据的一个子集感兴趣,因此我们对数据进行了分区,使得应用程序附带了一个子集(尽管大约100 MB)的数据对象.应用包.我们的用户可以选择在通过iTunes应用内购买支付额外内容后,从我们的服务器下载其他数据对象(大小约为5 MB到100 MB).增量数据文件(存在于sqlite后备存储中)使用与bundle附带的数据相同的xcdatamodel版本; 对象模型没有任何变化.增量数据文件作为gzip sqlite文件从我们的服务器下载.我们不希望通过随应用程序发送增量内容来扩大我们的应用程序包.此外,我们不希望依赖webservice上的查询(因为复杂的数据模型).我们测试了从服务器下载的增量sqlite数据.我们已经能够将下载的数据存储添加到应用程序的共享persistentStoreCoordinator中.  

{
       NSError *error = nil;
       NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                                [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
                                [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

       if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:defaultStoreURL options:options error:&error])
       {            
           NSLog(@"Failed with error:  %@", [error localizedDescription]);
           abort();
       }    

       // Check for the existence of incrementalStore
       // Add incrementalStore
       if (incrementalStoreExists) {
           if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:incrementalStoreURL options:options error:&error])
           {            
               NSLog(@"Add of incrementalStore failed with error:  %@", [error localizedDescription]);
               abort();
           }    
       }
 }
Run Code Online (Sandbox Code Playgroud)

  但是,这样做有两个问题.

  1. 数据获取结果(例如,使用NSFetchResultController)显示来自incrementalStoreURL的数据附加到defaultStoreURL的数据末尾.
  2. 一些对象是重复的.在我们的数据模型中有许多具有只读数据的实体; …

merge core-data objective-c object-graph core-data-migration

10
推荐指数
1
解决办法
5541
查看次数

Java中的对象树导航语言

在我正在开发的系统中,我经常需要导航对象树,并根据其状态和值采取行动.在普通的Java中,这导致了繁琐的for循环,if语句等...是否有其他方法来实现树导航,类似于XPath for XML?我知道有JXPath和OGNL,但你知道其他任何库吗?您是否知道任何为特定树导航表达式生成字节码的库,以使处理速度与Java本机fors和ifs一样快?

java xpath ognl object-graph

9
推荐指数
2
解决办法
4167
查看次数

是否有任何工具可以在iOS应用运行时生成对象图?

我知道有类模型工具(OmniGraffle,Doxygen)从现有的Xcode项目生成类模型图.但我正在寻找一种工具,在模拟器或设备中运行iOS应用程序时生成对象图.

cocoa-touch objective-c object-graph ios xcode-instruments

9
推荐指数
1
解决办法
3325
查看次数

用于在.NET中可视化对象图的库

有没有人知道或者可以推荐一个可以在.NET中以递归方式显示任意对象图的库?

我需要能够打印出(到控制台)对象图的格式化表示.例如,给出一个像这样的简单对象图:

var foo = new Foo();
foo.Bar = new Bar();
foo.Bar.Baz = 42;
foo.Bar.Qux = "quux";
foo.Corge = false;
Run Code Online (Sandbox Code Playgroud)

生成这样的输出很容易:

Foo:
    Bar:
        Baz: 42;
        Qux: "quux"
    Corge: false
Run Code Online (Sandbox Code Playgroud)

我本可以使用Reflection自己编写这样的库,但是如果它已经存在,我不妨使用它而不是浪费时间重新发明轮子.

我需要它来提供编码演示,以便向观众轻松展示构建的对象图形.

.net visualization object-graph

8
推荐指数
1
解决办法
822
查看次数

java:为自定义序列化分配对象引用ID

由于各种原因,我有一个自定义序列化,我将一些相当简单的对象转储到数据文件.可能有5-10个类,并且结果的对象图是非循环的并且非常简单(每个序列化对象具有1或2个对序列化的引用).例如:

class Foo
{
    final private long id;
    public Foo(long id, /* other stuff */) { ... }
}

class Bar
{
    final private long id;
    final private Foo foo;
    public Bar(long id, Foo foo, /* other stuff */) { ... }
}

class Baz
{
    final private long id;
    final private List<Bar> barList;
    public Baz(long id, List<Bar> barList, /* other stuff */) { ... }
}
Run Code Online (Sandbox Code Playgroud)

id字段仅用于序列化,因此当我序列化到文件时,我可以通过保存到目前为止序列化了哪些ID的记录来编写对象,然后为每个对象检查其子对象是否已被序列化并写入那些没有的,最后通过编写数据字段和与其子对象相对应的ID来编写对象本身.

令我困惑的是如何分配id.我想到了,似乎有三种情况可以分配ID:

  • 动态创建的对象 - 从递增的计数器分配id
  • 从磁盘读取对象 - 从磁盘文件中存储的编号分配id
  • singleton对象 - 在任何动态创建的对象之前创建对象,以表示始终存在的单个对象.

我该如何妥善处理?我觉得我正在重新发明轮子,必须有一套完善的技术来处理所有情况.


澄清: …

java serialization object-graph

6
推荐指数
1
解决办法
1403
查看次数

序列化 - 从流中查看对象图

我想知道是否有一种方法可以创建一个序列化对象图的树/视图,以及是否有人有任何指针?编辑我们的目标是,由于某些原因我们应该遇到反序列化问题,我们实际上可以查看/生成序列化数据的报告,以帮助我们在调试代码之前确定问题的原因.此外,我希望将来扩展它以采用两个流(版本1,版本2)并突出显示它们之间的差异,以帮助确保我们在代码更改期间不会意外删除有趣的信息./编辑

传统上我们使用Soap或XML序列化,但是这些对于我们的需求变得太受限制,而二进制序列化通常会做我们需要的所有事情.之所以没有采用,是因为查看序列化内容以帮助修复升级问题等更加困难.

所以我开始考虑尝试创建序列化信息的视图.我可以在一定程度上从ISerializable构造函数执行此操作:

public A(SerializationInfo info, StreamingContext context)
{}
Run Code Online (Sandbox Code Playgroud)

给定序列化信息,我可以反映m_data成员并查看实际的序列化内容.这种方法的问题是

  1. 它只显示树中的一个分支,我想从根显示整个树,并且从这个位置开始不可能.
  2. 询问信息不是一个方便的地方,我想将一个流传递给一个班级并在那里完成工作.

我已经看过ObjectManager类,但这适用于现有的对象图,而我需要能够从数据流中工作.我查看了BinaryFormatted,它使用了ObjectReader和__BinaryParser,挂钩到ObjectManager(我认为它将拥有整个内容,可能只是在一个平面列表中),但要复制它或通过反射调用它(2)这三个类是内部的)似乎相当多的工作,所以我想知道是否有更好的方法.

c# serialization object-graph

6
推荐指数
1
解决办法
589
查看次数