rest - How to handle python objects built from a web API that have references to each other? -
i'm building client library web api exposes objects this:
# objs/foo/obj_id_1 {id: "foo_id_1" name: "your momma" bar: "bar_id_2"} # objs/bar/obj_id_1 {id: "bar_id_2" name: "puh-lease" foo: "foo_id_1"} so, objects of type foo have reference objects of type bar , vice versa.
in python client library, build python objects out of api data. foo instance have bar attribute containing bar instance instead of id of bar , bar instance has reference foo instance in foo attribute.
my python classes have save , refresh methods post or web api, , sub-objects. example, if call a_foo.refresh(), automatically call a_foo.bar.refresh().
the above simplified example, , there might many different classes referring same instance of bar or foo or of many other types of objects get.
i think question 2 questions:
- what design or strategy ensure when build object api data of references other objects point same object if i've built object previous api requests?
- when call
saveorrefreshwhat's design or strategy prevent infinite loop when 2 or more objects refer each other?
this pretty broad question.
1) 1 way use factory method pattern. example:
def get_foo(_id): get_foo.foos = dict() def real_get_foo(_id): # foo api get_foo.foos[_id] = foo return foo if _id in get_foo.foos: return get_foo.foos[_id] return real_get_foo(_id) 2) don't think it's idea make nested saves. if write foo.bar.x = 5 followed foo.save() wouldn't expect bar saved. why? because called save() on foo, , shouldn't have worry unwanted saves on related objects.
Comments
Post a Comment