🚀 Mastering GraphQL: REST vs GraphQL ، فدراسیون و Auth.

طی چند سال گذشته ، گرافیک محبوبیت خود را به عنوان یک جایگزین مدرن برای استراحت برای ساخت API. در این پست ، ما تفاوت های کلیدی بین استراحت وت گرافیک، فدراسیون چیست و چگونه احراز هویت در آن کار می کند graphql api's
استراحت در مقابل GraphQL: تفاوت های کلیدی
کارایی درخواست
- استراحت: اغلب به درخواست های چند برابر به نقاط پایانی مختلف نیاز دارد.
- GraphQL: یک پرس و جو واحد می تواند همه چیز مورد نیاز را در یک درخواست ، کاهش تأخیر و بار شبکه بدست آورد.
نسخه سازی
- استراحت: به طور معمول از نسخه در URL استفاده می کند (مثال:
/api/v1/users
). - GraphQL: نیازی به نسخه نیست زیرا مشتری فقط زمینه های مورد نیاز خود را درخواست می کند و زمینه های جدید بدون شکستن چیزی می توانند اضافه شوند.
ساختار داده و انعطاف پذیری
- استراحت: هر نقطه پایانی مجموعه ای از داده های ثابت را برمی گرداند ، بنابراین شما اغلب برای دریافت تمام اطلاعات مورد نیاز خود به چندین تماس نیاز دارید.
- GRAPHQL: مشتری دقیقاً آنچه را که لازم دارد می پرسد ، از داده های غیر ضروری و درخواست های اضافی جلوگیری می کند.
تایپ و مستندات
- استراحت: بسته به اجرای آن ممکن است تایپ شود یا نباشد.
- GraphQL: از یک طرحواره به شدت تایپ شده استفاده می کند که به عنوان مستندات تولید شده برای توسعه دهندگان و مشتری ها خدمت می کند.
بار عقب
- استراحت: می تواند با درخواست های بیش از حد و داده های غیر ضروری ، پس زمینه را بیش از حد بارگذاری کند.
- GraphQL: برای رسیدگی به نمایش داده های پویا و پیچیده به یک پس زمینه بهینه تر نیاز دارد. ابزارهایی مانند Dataloader به جلوگیری از مشکلات Perfomances کمک می کند
فدراسیون GraphQL چیست؟
فدراسیون GraphQL اجازه می دهد تا یک طرح را به چندین سرویس مستقل که با هم به عنوان یک API واحد کار می کنند ، تقسیم کند.
مزایای فدراسیون
- به حفظ قابلیت کمک می کند ، زیرا هر تیم می تواند طرحواره خود را مدیریت کند.
- با جلوگیری از تماس های غیر ضروری به خدمات خارجی ، عملکرد را بهبود می بخشد.
- با توزیع قسمت های مختلف طرحواره در چندین سرویس دهنده ، مقیاس گذاری را آسان تر می کند.
- وابستگی بین خدمات را کاهش می دهد و سیستم را مدولار تر می کند.
فدراسیون آپولو یکی از محبوب ترین ابزارهای اجرای این رویکرد است.
اجزای اصلی فدراسیون آپولو
- حل کننده های مشترک: به اشخاص اجازه دهید تا در زیرگرافهای مختلف ارجاع شوند.
- خدمات زیرگراف: خدمات مستقل که بخش هایی از طرح جهانی را تعریف می کند.
- Gateway: یک نقطه پایانی GraphQL را با هم ترکیب و در معرض دید قرار دهید.
مثال Apollo Federation
- تعریف یک زیرگراف (سرویس کاربران)
# users-service/schema.graphql
extend type Query {
me: User
user(id: ID!): User
}
type User @key(fields: "id") {
id: ID!
name: String!
email: String!
}
- تعریف زیرگراف دیگر (سرویس سفارش)
# orders-service/schema.graphql
extend type Query {
orders(userId: ID!): [Order]
}
type Order {
id: ID!
product: String!
price: Float!
user: User
}
extend type User @key(fields: "id") {
id: ID! @external
orders: [Order]
}
const { ApolloGateway } = require('@apollo/gateway');
const { ApolloServer } = require('apollo-server');
const gateway = new ApolloGateway({
serviceList: [
{ name: 'users', url: 'http://localhost:4001/graphql' },
{ name: 'orders', url: 'http://localhost:4002/graphql' }
]
});
const server = new ApolloServer({ gateway });
server.listen().then(({ url }) => {
console.log(`Gateway running at ${url}`);
});
auth in graphql
بر خلاف استراحت ، GraphQL برای همه نمایش داده ها و جهش ها یک نقطه پایانی واحد دارد ، بنابراین Auth به یک رویکرد متفاوت نیاز دارد.
نمونه
const { ApolloServer, gql } = require('apollo-server');
const jwt = require('jsonwebtoken');
const typeDefs = gql`
type Query {
me: User
}
type User {
id: ID!
name: String!
email: String!
}
`;
const resolvers = {
Query: {
me: (parent, args, context) => {
if (!context.user) {
throw new Error("Unauthorized");
}
return context.user;
},
},
};
const getUserFromToken = (token) => {
try {
return jwt.verify(token, 'your_secret_key');
} catch (error) {
return null;
}
};
const server = new ApolloServer({
typeDefs,
resolvers,
context: ({ req }) => {
const token = req.headers.authorization || "";
const user = getUserFromToken(token.replace("Bearer ", ""));
return { user };
},
});
server.listen().then(({ url }) => {
console.log(`Server running at ${url}`);
});
روشهای متداول:
-
OAUTH 2.0:
- از جریان هایی مانند جریان کد Auth برای تأیید اعتبار کاربران استفاده می کند.
- برای ورود به سیستم شخص ثالث (Google ، Github و غیره) مشترک است.
-
Auth Middleware:
- می تواند قبل از پردازش نمایش داده ها یا جهش ها ، نشانه ها را تأیید کند.
- در چارچوب هایی مانند Apollo Server ، اغلب در زمینه درخواست اجرا می شود.
-
JWT (JSON WEB TOKEN):
- هم برای تأیید اعتبار و هم برای مدیریت مجوز خوب کار می کند.
- توکن در
Authorization
هدر - در هر حل کننده یا از طریق میان افزار قابل تأیید است.
پایان
گرافیک مزایای عمده ای را به همراه دارد استراحت، مانند انعطاف پذیری و واکشی داده های کارآمد. فدراسیون آن را برای سیستم های توزیع شده مقیاس پذیر می کند و تأیید اعتبار را می توان به راحتی با آن اجرا کرد jwt یا اوتبشر
اگر در حال ساخت مدرن هستید APISبا گرافیک قطعاً ارزش در نظر گرفتن دارد! با رشد پروژه شما ، با معماری ها و مقیاس های مختلف به خوبی ادغام می شود.
از این پست لذت بردید؟ نظر خود را رها کنید و خود را به اشتراک بگذارید گرافیک تجربه!