REST APIS VS GRAPHQL: آیا یکی یا دیگری است؟

GraphQL و REST روشهای محبوب برای ساخت API هستند که انتقال داده ها را در شبکه ها تسهیل می کند. هر دو رویکرد بر اصول کلیدی مانند بی تابعیت و جداسازی واضح مشتری و سرور تأکید دارند. آنها به HTTP به عنوان پروتکل اصلی ارتباطات متکی هستند. هر دو روش انعطاف پذیر برای توسعه API هستند و به راحتی می توانند با زبان ها و برنامه های مختلف برنامه نویسی ادغام شوند. از آنجا که توسعه دهندگان شروع به استفاده بیشتر از API کردند ، نیاز به فیلتر و اصلاح پاسخ ها بوجود آمد. برخی از API ها از تماس های همزمان پشتیبانی می کنند ، جایی که یک خروجی به عنوان ورودی دیگری برای دیگری عمل می کند ، در حالی که برخی دیگر می توانند به موازات طراحی کار کنند. این فرآیند با نام ارکستراسیون API ، مزایای GraphQL را نسبت به API های REST برجسته می کند.
اما اگر ساعات و پول مهندسی قابل توجهی را برای توسعه API های REST برای سازمان خود سرمایه گذاری کرده اید ، چه می کنید؟ آیا ارزش بازنویسی همه اینها برای اجرای GraphQL است؟
خبر خوب این است که برای استفاده از GraphQL و استفاده از ارکستر API ، لازم نیست که هیچ یک از API های REST خود را بازنویسی کنید! اتصالات آپولو برای API های REST ، ادغام API های REST را در GraphQL خود آسان و سریع و بدون کد پیچیده برای نوشتن یا کامپایل کردن آسان و سریع می کند!
برای نشان دادن ، یک نقطه پایانی API REST را در نظر بگیرید /getOrders/:orderId
، جایی که OrderID یک شناسه سفارش مانند “12345” را نشان می دهد. پاسخ به درخواست دریافت /getOrders/12345
خواهد بود:
{
"order_id": "12345",
"customer": {
"id": "C001",
"name": "John Doe",
"email": "johndoe@example.com"
},
"items": [
{
"product_id": "P1001",
"name": "Wireless Mouse",
"quantity": 2,
"price": 25.99
},
{
"product_id": "P1002",
"name": "Mechanical Keyboard",
"quantity": 1,
"price": 89.99
}
],
"total_price": 141.97,
"status": "Shipped",
"order_date": "2025-02-25T14:30:00Z"
}
برای ادغام این API REST با GraphQL ، فقط باید تعریف کنید @source
دستورالعمل در طرحواره GraphQL شما مانند این:
extend schema
@link(
url: "https://specs.apollo.dev/federation/v2.10"
import: ["@key", "@requires"]
)
@link(
url: "https://specs.apollo.dev/connect/v0.1"
import: ["@source", "@connect"]
)
@source(
name: "orders"
http: {
baseURL: "<>"
})
سپس انواع و پرس و جوهای خود را اضافه کنید:
type Order {
orderId: ID!
customer: String!
totalItems: Float!
totalPrice: Float!
status: String!
orderDate: String!
}
type Query {
getOrder(order_id: ID!): Order
@connect(
source: "orders"
http: { GET: "/getOrders/{$args.order_id}" }
selection: """
orderId: order_id
customer:customer.name
totalItems: items->size
totalPrice: total_price
status
orderDate: order_date
"""
)
}
در @connect
دستورالعمل در پرس و جو به GraphQL دستور می دهد از کانکتور “سفارشات” استفاده کند. همچنین می توانید یک مسیر منبع را مشخص کنید که به پایه تعریف شده در @source
بیانیه اعلامیه قسمت انتخاب نشان می دهد که چگونه می خواهید داده ها به مشتری برگردانده شوند. در اینجا ، می توانید به صورت اختیاری داده ها را تغییر داده و فیلتر کنید. برای کمک به شما در ساخت نقشه برداری انتخاب ، آپولو همانطور که در شکل زیر نشان داده شده است ، یک زمین بازی نقشه برداری رایگان را ارائه می دهد.
Mapper Connection ورودی را می گیرد و می تواند نقشه برداری را بر اساس آن ورودی پیشنهاد کند. در این مثال ، ما در حال تغییر نام زمینه ها و حتی تبدیل یک فیلد به نام Totlitems هستیم تا نشان دهیم که به جای لیست کردن موارد خود ، تعداد کالاهای مرتبه ای را در خود نشان می دهد (به عنوان مثال ، “Totalitems: موارد-> اندازه”). با استفاده از جعبه ماسه ای آپولو که با Rover CLI گنجانده شده است ، می توانید نمایش داده های Ad-Hoc GraphQL را اجرا کنید. در شکل زیر ، ما با عبور از “12345” پرس و جو GetOrder را اجرا کردیم و داده های برگشتی نشان داده شده از API REST ما است.
تمام این پیکربندی بدون هیچ کد رویه ای ، صرفه جویی در وقت و ایجاد یکپارچه سازی API های REST موجود در نمودار انجام شد!
برای اطلاعات بیشتر در مورد اتصالات آپولو ، موارد زیر را بررسی کنید: