انتقل إلى المحتوى

تحويل GraphQL إلى أصناف Java — Numio

يُنشئ أصناف Java لأنواع enum وinput في مخطط GraphQL باستخدام @graphql-codegen/java. يُوضع كل شيء داخل public class Types؛ ولا تُحوَّل أنواع الكائنات ولا interface ولا الاستعلامات.

إنشاء أصناف input في Java لوسائط mutations في خادم graphql-java.

GraphQL Schema

Java (Enum and Input)

متى تستخدمها

  • إنشاء أصناف input في Java لوسائط mutations في خادم graphql-java.
  • الحصول على أنواع enum في Java تطابق قيم enum في GraphQL تمامًا.

طريقة الاستخدام

  1. الصق مخططًا يحتوي على تعريفات enum وinput في محرر GraphQL Schema.
  2. راجع صنف Types المُنشأ: public enum واحد لكل enum في GraphQL، وpublic static class واحد لكل نوع input.
  3. انسخه إلى ملف Types.java وغيّر package com.example.graphql إلى الحزمة الخاصة بك.

مخطط GraphQL

enum Role {
  ADMIN
  EDITOR
}

input CreateUserInput {
  name: String!
  email: String
  role: Role = EDITOR
  tags: [String!]
}

type Query {
  ping: String
}

أنواع enum وأصناف input في Java

package com.example.graphql;

import java.util.HashMap;
import java.util.Map;

public class Types {
  public enum Role {
    ADMIN,
    EDITOR
    
  }
  
  public static class CreateUserInput {
    private String name;
    private String email;
    private Role role;
    private Iterable<String> tags;
  
    public CreateUserInput(Map<String, Object> args) {
      if (args != null) {
        this.name = (String) args.get("name");
        this.email = (String) args.get("email");
        if (args.get("role") instanceof Role) {
          this.role = (Role) args.get("role");
…

التفاصيل والقيود

سطر package افتراضيًا هو com.example.graphql، لأن الصفحة لا تحتوي على إعداد للحزمة. غيّره إلى حزمة مشروعك.

لكل صنف input مُنشئ يقرأ Map<String, Object> من الوسائط، إضافة إلى دوال getter وsetter. لا تُطبَّق القيم الافتراضية من المخطط (role: Role = EDITOR).

ربط الأنواع: String إلى String، وInt إلى Integer، وFloat إلى Double، وBoolean إلى Boolean، وID إلى Object، والقوائم إلى Iterable<T>. أسماء input التي لا تنتهي بـ Input تُضاف إليها هذه اللاحقة (يصبح A هو AInput).

FAQ

لماذا تغيب أنواع الكائنات الخاصة بي عن مخرجات Java؟

تُنشئ إضافة java أنواع enum وinput فقط. للحصول على واجهات data fetcher لكل نوع كائن، استخدم خيار JAVA Resolvers Signature في صفحة GraphQL to Resolvers Signature.

كيف تُعالَج أنواع input المتداخلة؟

الحقل الذي نوعه input آخر يصبح ذلك الصنف، ويبنيه المُنشئ من الخريطة المتداخلة، مثل new BInput((Map<String, Object>) args.get("nested")).

هل يعمل على خادم؟

لا. يعمل مولّد الشيفرة في Web Worker داخل متصفحك.

المواصفات والمراجع