2017-04-18 13 views
5

- GraphQLInterfaceTypeGraphQL'de `interfaceType 've` isTypeOf` işlevlerini kullanırken `interface' özelliği çok nasıl işlenir? Bu büyük özünden aracılığıyla okumuştu

Ama yine sahip bazı karışıklıklar:

  1. Hepsi bu kadar mı GraphQL şema türleri için ES6 classes tanımlamak için gerçekten gerekli?
    • Buradaki temel sorun şu: Çok fazla boş ES6 classes ve eşdeğer miktarda GraphQL types ile sona ereceğiz. Değilse
  2. , o zaman nasıl resolveType ve isTypeOf kullanımı interfaces çok özellikleri düzgün ne zaman ele?
  3. Ben bile tüm GraphQL types için tüm ES6 classes tanımlanmış, ancak ham veri bu sınıflar tanımlara Hiçbir ilişkisi grpc+protobuf gibi farklı teknoloji, farklı bir yerde inşa edilir, böylece burada nasıl isTypeOf: (value) => value instanceof Dog çalışır?

cevap

3

resolveType ve 'un uygulanması, bir nedenden ötürü çok esnektir: son derece uygulamaya özgüdür. Veritabanına, veri modellerine, türüne, türüne vb. Bağlıdır. Bazı arka planlar, tüm modellerinde ayrı bir ES6 sınıfına sahip olabilir, özellikle de ORM kullanıyorsa, veritabanını sorguladığınızda bu sınıfların örneklerini oluşturur. Ancak bir ORM gerekli değildir. Ve GraphQL türünü bulmak için başka sınıflar başlatmanız gerekmemelidir.

Bazı durumlarda, yalnızca nesneleri nesnelerin özelliklerinden belirleyebilirsiniz. Uygulamanız için böyle değilse, ipuçlarını vermek için yapabileceğiniz şeyler vardır. İşte bir SQL örneği. resolveType uygulayan basit özellik arama böylece

SELECT 
    id, 
    body, 
    author_id, 
    post_id, 
    'Comment' AS "$type" -- leave a hint to resolve the type 
FROM comments 
UNION 
SELECT 
    id, 
    body, 
    author_id, 
    NULL AS post_id, 
    'Post' AS "$type" -- leave a hint to resolve the type 
FROM posts 

Bu sorgu, bir "tip ipucu", ek bir hesaplanan sütun sağlar. Diğer DBMS benzer bir strateji kullanabilir.

İlgili konular