إتقان GraphQL مع بايثون: دليل كامل لتطوير API بكفاءة

اكتشف قوة GraphQL مع بايثون في هذا الدليل الشامل. تعلم كيفية إعداد خادم GraphQL، وتوسيع المخططات، واختبار واجهات البرمجة بكفاءة باستخدام Apidog. مثالي للمطورين الذين يتطلعون إلى تحسين سير العمل في تطوير واجهات البرمجة الخاصة بهم.

Amir Hassan

Amir Hassan

13 أغسطس 2025

إتقان GraphQL مع بايثون: دليل كامل لتطوير API بكفاءة

Apidog للمؤسسات

نشر محلي

SSO & RBAC

متوافق مع SOC 2

استكشاف Apidog Enterprise

مرحبًا متحمسي التقنية! إذا كنت هنا، فمن المحتمل أنك فضولي حول كيفية استغلال قوة GraphQL باستخدام Python. حسنًا، لقد جئت إلى المكان المناسب. اليوم، سنغوص في عالم GraphQL وPython المثير، مستكشفين كيفية عمل هذين الاثنين معًا لبناء واجهات برمجة تطبيقات فعالة وقوية. على طول الطريق، سنقدم لكم أداة رائعة تسمى Apidog التي يمكن أن تجعل رحلتك في التطوير أكثر سلاسة.

💡
هل أنت مستعد لتعزيز تطوير واجهة برمجة التطبيقات الخاصة بك؟ قم بتحميل Apidog مجانًا اليوم وابدأ في بناء واجهات برمجة تطبيقات فعالة ومرنة بسهولة!
button

ما هو GraphQL؟

دعونا نوضح أولاً ما هو GraphQL. ببساطة، GraphQL هو لغة استعلام لواجهة برمجة التطبيقات الخاصة بك، ووقت تشغيل لتنفيذ تلك الاستعلامات باستخدام نظام نوع تقوم بتحديده لبياناتك. بخلاف REST، حيث يتعين عليك إجراء طلبات متعددة إلى نقاط نهاية مختلفة لجلب البيانات ذات الصلة، يتيح لك GraphQL الحصول على جميع المعلومات التي تحتاجها في طلب واحد. يمكن أن يقلل هذا بشكل كبير من كمية نقل البيانات ويحسن كفاءة تطبيقاتك.

GraphQL official website

لماذا تختار GraphQL على REST؟

قد تتساءل، لماذا يجب أن أختار GraphQL على واجهة برمجة التطبيقات التقليدية REST؟ إليك بعض الأسباب المقنعة:

  1. استعلامات مرنة: مع GraphQL، يمكنك طلب بالضبط البيانات التي تحتاجها، لا أكثر ولا أقل.
  2. تحميل بيانات فعال: يساعد في جلب الموارد المتداخلة في طلب واحد.
  3. مخطط محدد بشكل قوي: يستخدم GraphQL نظام نوع لوصف قدرات واجهة برمجة التطبيقات، مما يساعد في التحقق من صحة الاستعلامات وتجنب الأخطاء الشائعة.
  4. استكشاف المعلومات: واجهات برمجة التطبيقات GraphQL توثق ذاتيًا، مما يعني أن المطورين يمكنهم استعلام واجهة برمجة التطبيقات نفسها لفهم العمليات المدعومة.

إعداد GraphQL مع Python

الآن، دعونا نبدأ العمل ونتدرب على بعض الأكواد. سنستخدم مكتبة graphene، وهي أداة قوية لبناء واجهات برمجة تطبيقات GraphQL في Python.

الخطوة 1: تثبيت الحزم المطلوبة

أولاً، تحتاج إلى تثبيت الحزم الضرورية. افتح المحطة الخاصة بك وقم بتشغيل:

pip install graphene
pip install flask
pip install flask-graphql

الخطوة 2: إنشاء خادم GraphQL بسيط

دعونا نخلق خادم GraphQL بسيط باستخدام Flask وGraphene. أنشئ ملفًا باسم app.py وأضف الكود التالي:

from flask import Flask
from flask_graphql import GraphQLView
import graphene

# تعريف استعلام بسيط
class Query(graphene.ObjectType):
    hello = graphene.String(name=graphene.String(default_value="غريب"))

    def resolve_hello(self, info, name):
        return f'مرحبًا {name}!'

schema = graphene.Schema(query=Query)

app = Flask(__name__)
app.add_url_rule('/graphql', view_func=GraphQLView.as_view('graphql', schema=schema, graphiql=True))

if __name__ == '__main__':
    app.run(debug=True)

يفعل هذا الكود إعداد خادم GraphQL بسيط مع استعلام واحد يعيد رسالة ترحيب. يمكنك تشغيل الخادم عن طريق تنفيذ:

python app.py

افتح متصفحك وانتقل إلى http://localhost:5000/graphql. سترى واجهة GraphiQL حيث يمكنك تشغيل استعلامات GraphQL الخاصة بك.

الخطوة 3: توسيع المخطط بأنواع ومحللات أكثر

دعونا نوسع مخططنا ليشمل أنواعًا ومحللات أكثر تعقيدًا. تخيل أنك تبني واجهة برمجة تطبيقات مدونة. ستحتاج إلى أنواع لـ User، Post، و Comment.

class User(graphene.ObjectType):
    id = graphene.ID()
    username = graphene.String()
    email = graphene.String()

class Post(graphene.ObjectType):
    id = graphene.ID()
    title = graphene.String()
    content = graphene.String()
    author = graphene.Field(User)

class Comment(graphene.ObjectType):
    id = graphene.ID()
    content = graphene.String()
    author = graphene.Field(User)
    post = graphene.Field(Post)

class Query(graphene.ObjectType):
    hello = graphene.String(name=graphene.String(default_value="غريب"))
    users = graphene.List(User)
    posts = graphene.List(Post)

    def resolve_hello(self, info, name):
        return f'مرحبًا {name}!'

    def resolve_users(self, info):
        return [
            User(id="1", username="john_doe", email="john@example.com"),
            User(id="2", username="jane_doe", email="jane@example.com")
        ]

    def resolve_posts(self, info):
        return [
            Post(id="1", title="المشاركة الأولى", content="هذه هي مشاركتي الأولى", author=User(id="1", username="john_doe", email="john@example.com")),
            Post(id="2", title="المشاركة الثانية", content="هذه هي مشاركتي الثانية", author=User(id="2", username="jane_doe", email="jane@example.com"))
        ]

schema = graphene.Schema(query=Query)

اختبار وتصحيح باستخدام Apidog

عندما يتعلق الأمر باختبار وتصحيح واجهة برمجة التطبيقات GraphQL الخاصة بك، تحتاج إلى أداة قوية. هنا يأتي دور Apidog. Apidog هي أداة قوية لتطوير واجهات برمجة التطبيقات تساعدك في تصميم واختبار وتوثيق واجهات برمجة التطبيقات بكفاءة. مع واجهته سهلة الاستخدام وميزاته المتقدمة، يعمل Apidog على تبسيط دورة حياة واجهة برمجة التطبيقات بأكملها.

Apidog main interface

لماذا تستخدم Apidog؟

بدء استخدام Apidog

قم بتحميل Apidog مجانًا من الموقع الرسمي. بمجرد تثبيته، اتبع هذه الخطوات لبدء استخدامه مع واجهة برمجة التطبيقات GraphQL الخاصة بك:

لإنشاء طلب GraphQL جديد في مشروع، انقر على "Body" → "GraphQL" بالتسلسل.

create a new GraphQL request

أدخل استعلامك في خانة الاستعلام في علامة "تشغيل". يمكنك أيضًا النقر على زر Fetch Schema اليدوي في خانة الإدخال لتمكين ميزة "إكمال الكود" لتعبيرات الاستعلام، مما يساعد في إدخال عبارات الاستعلام.

Requesting GraphQL

تدعم عبارات الاستعلام استخدام متغيرات GraphQL في الطلب. للاستخدام المحدد، يرجى الرجوع إلى صيغة GraphQL.

Requesting GraphQL

ميزات GraphQL المتقدمة

يقدم GraphQL العديد من الميزات المتقدمة التي يمكن أن تعزز تجربة تطوير واجهة برمجة التطبيقات الخاصة بك. دعونا نستكشف بعضًا منها:

التغييرات

بالإضافة إلى استعلام البيانات، يمكنك أيضًا تعديل البيانات باستخدام تغييرات GraphQL. دعونا نضيف تغييرًا لإنشاء منشور جديد.

class CreatePost(graphene.Mutation):
    class Arguments:
        title = graphene.String(required=True)
        content = graphene.String(required=True)
        author_id = graphene.ID(required=True)

    post = graphene.Field(lambda: Post)

    def mutate(self, info, title, content, author_id):
        author = User(id=author_id, username="john_doe", email="john@example.com")
        post = Post(id="3", title=title, content=content, author=author)
        return CreatePost(post=post)

class Mutation(graphene.ObjectType):
    create_post = CreatePost.Field()

schema = graphene.Schema(query=Query, mutation=Mutation)

الاشتراكات

تسمح لك اشتراكات GraphQL بالاستماع إلى التحديثات الحية. هذه مفيدة بشكل خاص للتطبيقات التي تتطلب تحديثات مباشرة، مثل تطبيقات الدردشة أو نتائج الرياضات الحية.

import asyncio
import graphene
import websockets
from graphql import GraphQLError

class Message(graphene.ObjectType):
    content = graphene.String()
    author = graphene.String()

class Subscription(graphene.ObjectType):
    message_sent = graphene.Field(Message)

    async def subscribe_message_sent(root, info):
        while True:
            message = await get_new_message()
            yield {"message_sent": message}

async def get_new_message():
    # محاكاة استلام رسالة جديدة
    await asyncio.sleep(2)
    return Message(content="مرحبًا، عالم!", author="john_doe")

schema = graphene.Schema(query=Query, mutation=Mutation, subscription=Subscription)

اعتبارات الأمان

عند بناء واجهات برمجة التطبيقات، يجب أن تكون الأمان دائمًا في المقام الأول. إليك بعض الممارسات الجيدة لتأمين واجهات برمجة التطبيقات GraphQL الخاصة بك:

الخاتمة

تعتبر GraphQL وPython مزيجًا قويًا لبناء واجهات برمجة تطبيقات فعالة ومرنة. بمساعدة مكتبات مثل Graphene وأدوات مثل Apidog، يمكنك تبسيط عملية التطوير لديك وبناء واجهات برمجة تطبيقات قوية تلبي احتياجاتك المحددة. سواء كنت تبني واجهة برمجة تطبيقات مدونة بسيطة أو تطبيقًا معقدًا يتم تحديثه في الوقت الحقيقي، ستساعدك المبادئ والتقنيات التي تمت مناقشتها في هذا الدليل على البدء بشكل صحيح.

إذاً، ما الذي تنتظره؟ اغمر في عالم GraphQL مع Python، ولا تنسَ تحميل Apidog مجانًا لجعل رحلتك في التطوير أكثر سلاسة. برمجة سعيدة!

button

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات