Jestem w trakcie pisania mojej pierwszej usługi RESTful Web w środowisku GAE i środowiska wykonawczego Python 2.7; Zacząłem od używania nowego, ndb API Guido.Po otrzymaniu odsyłaczy nieznanych rodzajów w NDB
Nie jestem jednak pewien, jak rozwiązać konkretny przypadek bez domyślnej funkcji odsyłacza wstecznego oryginalnego interfejsu API bazy danych. Jeśli użytkownik-agent zwraca szczególną zasobów i te zasoby 1 stopień usunięte:
host/api/rodzaj/id głębokość = 2
Jaki jest najlepszy sposób, aby odkryć powiązany zbiór podmiotów z " jeden "w relacji jeden do wielu, zważywszy, że rodzaj pokrewnego podmiotu jest nieznany w czasie rozwoju?
jestem w stanie użyć kwerendy zastępczej jak opisano w previous SO inquiry z powodu tego ostatniego ograniczeń. Fakt, że mój model jest definiowalny w czasie wykonywania (a zatem nie jest na sztywno zakodowany) uniemożliwia mi użycie kwerendy do filtrowania właściwości dla pasujących kluczy.
Ancestor i inne bezinteresowne zapytania są również obecnie niedostępne z powodu ograniczenia magazynu danych, które uniemożliwia mi filtrowanie właściwości bez określonego rodzaju.
dotąd jedyny pomysł miałem (poza powracanie do API dB) jest użycie transakcji cross-grupy, aby napisać własny odniesienia na „jeden”, albo poprzez aktualizowanie NDB. StringProperty (repeat = True) zawierające wszystkie powiązane rodzaje, gdy wprowadzany jest element nowego rodzaju, lub po prostu utrzymywanie listy kluczy w "jednym" ndb.KeyProperty (repeat = True) za każdym razem, gdy powiązany "wiele" obiekt jest napisane do magazynu danych.
Mam nadzieję, że ktoś bardziej doświadczony niż ja może zaproponować lepsze podejście.
Biorąc sugestia jmort253 jest, postaram się poszerzyć moje pytanie o konkretny przykład zaadaptowanej z docs:
class Contact(ndb.Expando):
""" The One """
# basic info
name = ndb.StringProperty()
birth_day = ndb.DateProperty()
# If I were using db, a collection called 'phone_numbers' would be implicitly
# created here. I could use this property to retrieve related phone numbers
# when this entity was queried. Since NDB lacks this feature, the service
# will neither have a reference to query nor the means to know the
# relationship exists in the first place since it cannot be hard-coded. The
# data model is extensible and user-defined at runtime; most relationships
# will be described only in the data, and must be discoverable by the server.
# In this case, when Contact is queried, I need a way to retrieve the
# collection of phone numbers.
# Company info.
company_title = ndb.StringProperty()
company_name = ndb.StringProperty()
company_description = ndb.StringProperty()
company_address = ndb.PostalAddressProperty()
class PhoneNumber(ndb.Expando):
""" The Many """
# no collection_name='phone_numbers' equivalent exists for the key property
contact = ndb.KeyProperty(kind='Contact')
number = ndb.PhoneNumberProperty()
Witam, czy możesz pokazać przykład, aby nieco lepiej zrozumieć problem. Wiele osób jest wizualnych, więc widzenie może pomóc ci wyjaśnić twoje pytanie. Powodzenia!:) – jmort253
Jeśli nie wiesz, jakiego rodzaju podmiotu szukasz, co zrobisz z nim/nimi po ich pobraniu? –
Warstwa usługowa po prostu przekształci szereg powiązanych z nią encji, które odkrył, w reprezentację JSON jednostki jawnie żądanej. Od aplikacji klienckiej zależy sposób ich użycia; serwer nie dba o to. – yo22arian