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

تحويل JSON إلى مخطط GraphQL — Numio

ينشئ أنواع كائنات GraphQL SDL من عينة JSON. يصبح الجذر AutogeneratedMainType، ويصبح كل كائن متداخل أو مصفوفة كائنات نوعًا مسمًّى، وتُدمج كل عناصر المصفوفة في نوع واحد.

إعداد مسودة أنواع لغلاف GraphQL حول نقطة نهاية REST موجودة انطلاقًا من إحدى استجاباتها.

JSON

GraphQL

متى تستخدمها

  • إعداد مسودة أنواع لغلاف GraphQL حول نقطة نهاية REST موجودة انطلاقًا من إحدى استجاباتها.
  • الحصول على مخطط أولي لخادم وهمي (mock) أو نموذج أولي بنهج schema-first من بيانات نموذجية.

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

  1. الصق كائن JSON، أو مصفوفة كائنات تُدمج في نوع جذر واحد، في المحرر الأيسر، أو استخدم زر تحميل الملف لفتح ملف بترميز UTF-8.
  2. تحقق من الأنواع المُنشأة: الأسماء مأخوذة من المفاتيح (posts يصبح Posts)، والقيم البسيطة تُحوَّل إلى String أو Int أو Float أو Boolean.
  3. انسخ SDL، ثم أضف ! للحقول الإلزامية، وغيّر حقول id إلى ID، وأعد تسمية AutogeneratedMainType.

كائن JSON

{
  "id": "u_1",
  "name": "Ada",
  "age": 36,
  "score": 9.5,
  "nickname": null,
  "tags": ["math"],
  "address": { "city": "London" },
  "posts": [{ "id": 7, "title": "Notes" }]
}

مخطط GraphQL (SDL)

type AutogeneratedMainType {
  id: String
  name: String
  age: Int
  score: Float
  nickname: String
  tags: [String]
  address: Address
  posts: [Posts]
}

type Address {
  city: String
}

type Posts {
  id: Int
  title: String
}

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

تُدمج الحقول عبر كل عناصر المصفوفة. تصبح null والمصفوفات الفارغة String و[String]؛ وInt المختلط مع Float يصبح Float، والتعارضات الأخرى تعود إلى String.

أسماء الأنواع مأخوذة من المفاتيح (posts يصبح Posts). إذا احتوى المفتاح نفسه كائنات بأشكال مختلفة، يُسمّى اللاحق منها باسم أبيه (مثل AB) بدلًا من الكتابة فوق السابق.

لا تُنشأ ! (non-null) ولا ID ولا نوع Query ولا أنواع input. تأخذ الأعداد الصحيحة خارج نطاق 32 بت النوع Float، لأن Int في GraphQL بطول 32 بت.

يعمل في متصفحك وتُنسَّق النتيجة بـ Prettier؛ ويظهر خطأ التحليل عند إدخال JSON غير صالح.

FAQ

هل يمكنني تحويل مصفوفة JSON في المستوى الأعلى؟

نعم، إذا كانت تحتوي على كائنات: تُدمج كل العناصر في AutogeneratedMainType، فتُضمَّن الحقول التي تظهر في بعض العناصر فقط. تُرفض المصفوفة الجذرية من القيم البسيطة لأنها بلا حقول.

لماذا نوع الحقل id هو String وليس ID؟

تُستنتج الأنواع من قيمة JSON فقط: id النصي يصبح String والرقمي يصبح Int. غيّره يدويًا إلى ID.

كيف تُحدَّد أنواع القيم null؟

كـ String، لأن القيمة null لا تحمل نوعًا. استبدلها بقيمة نموذجية حقيقية إذا كان الحقل رقمًا أو كائنًا.

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