کاوش در سبک های مختلف معماری API: GraphQL، gRPC، سوکت ها و SOAP

در دنیای توسعه API، انواع سبک های معماری برای انتخاب وجود دارد که هر کدام دارای مزایای خاص خود و موارد استفاده خاص هستند. در این مقاله، چهار مورد از محبوبترین سبکها را بررسی میکنیم: GraphQL، gRPC، Sockets و SOAP. از طریق مثالهای کد عملی، نحوه پیادهسازی هر سبک و بحث در مورد کاربرد آنها را در سناریوهای مختلف خواهیم دید.
1) GraphQL:
GraphQL یک زبان پرس و جو برای APIهای توسعه یافته توسط فیس بوک است که به مشتریان اجازه می دهد فقط داده های مورد نیاز خود را درخواست کنند. مدل داده مبتنی بر نمودار آن انعطاف پذیری و کارایی زیادی در انتقال داده ارائه می دهد. در اینجا مثالی از نحوه پیاده سازی سرور GraphQL در Node.js با استفاده از کتابخانه graphql-yoga آورده شده است:
جاوا اسکریپت
const { GraphQLServer } = require('graphql-yoga');
// Define the GraphQL schema
const typeDefs = `
type Query {
hello: String!
}
`;
// Resolvers
const resolvers = {
Query: {
hello: () => 'Hello world!',
},
};
// Create the GraphQL server
const server = new GraphQLServer({ typeDefs, resolvers });
// Start the server
server.start(() => console.log('GraphQL server running at http://localhost:4000'));
در این مثال ساده، یک طرحواره GraphQL را با یک فیلد hello تعریف می کنیم که یک رشته را برمی گرداند. سپس، ما یک Resolver را برای رسیدگی به درخواست hello پیاده سازی می کنیم.
برنامه های GraphQL:
- برنامه های کاربردی وب تعاملی
- میکروسرویس ها
- برنامه های موبایل
2) gRPC:
gRPC یک سیستم منبع باز Remote Procedure Call (RPC) است که توسط Google توسعه یافته است. از HTTP/2 برای ارتباط و از بافرهای پروتکل گوگل (protobuf) برای سریال سازی داده ها استفاده می کند. در زیر مثالی از نحوه تعریف سرویس gRPC و پیاده سازی آن در Node.js آورده شده است:
پروبوف
// Define the service in a .proto file
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloResponse) {}
}
message HelloRequest {
string name = 1;
}
message HelloResponse {
string message = 1;
}
جاوا اسکریپت
const grpc = require('grpc');
const protoLoader = require('@grpc/proto-loader');
// Load the .proto file
const packageDefinition = protoLoader.loadSync('greeter.proto');
const { Greeter } = grpc.loadPackageDefinition(packageDefinition);
// Implement the gRPC service
function sayHello(call, callback) {
callback(null, { message: 'Hello ' + call.request.name });
}
// Create the gRPC server
const server = new grpc.Server();
server.addService(Greeter.service, { sayHello });
server.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure());
server.start();
console.log('gRPC server running at http://localhost:50051');
در این مثال، ما یک سرویس Greeter را با متد SayHello تعریف می کنیم که یک درخواست با نام دریافت می کند و یک پیام تبریک برمی گرداند.
کاربردهای gRPC:
- برنامه های کاربردی توزیع شده
- میکروسرویس های مبتنی بر پروتکل
- برنامه های کاربردی با کارایی بالا
3) سوکت:
سوکت ها راهی برای ارتباط دوطرفه بلادرنگ بین مشتری و سرور فراهم می کنند. آنها به طور گسترده در برنامه های چت، بازی های آنلاین و پخش زنده داده ها استفاده می شوند. در اینجا مثالی از نحوه پیاده سازی یک سرور چت ساده با استفاده از سوکت ها در Node.js آورده شده است:
جاوا اسکریپت
const net = require('net');
const server = net.createServer(socket => {
console.log('Client connected');
socket.on('data', data => {
console.log('Message received:', data.toString());
socket.write('Message received');
});
socket.on('end', () => {
console.log('Client disconnected');
});
});
server.listen(3000, () => {
console.log('Chat server running on port 3000');
});
در این مثال، ما یک سرور سوکت ایجاد می کنیم که به پورت 3000 گوش می دهد و اتصالات مشتری را مدیریت می کند. هنگامی که یک مشتری پیامی را ارسال می کند، سرور آن را دریافت می کند و با یک پیام تأیید پاسخ می دهد.
برنامه های کاربردی سوکت:
- برنامه های بلادرنگ
- اعلان های فشاری
- نظارت از راه دور
4) صابون:
SOAP (پروتکل دسترسی به اشیاء ساده) یک پروتکل مبتنی بر XML برای تبادل ساختار یافته پیام از طریق یک شبکه کامپیوتری است. اگرچه تا حد زیادی با فناوری های مدرن مانند GraphQL و gRPC جایگزین شده است، اما همچنان در محیط های سازمانی قدیمی استفاده می شود. در زیر مثالی از نحوه تعریف سرویس SOAP و پیاده سازی آن در Node.js با استفاده از کتابخانه soap آورده شده است:
جاوا اسکریپت
const soap = require('soap');
// Define the SOAP service
const service = {
HelloService: {
HelloPort: {
sayHello: args => {
return { message: 'Hello ' + args.name };
},
},
},
};
// Create the SOAP server
const xml = require('fs').readFileSync('hello.wsdl', 'utf8');
const server = soap.createServer({ services: service, xml: xml });
// Start the server
server.listen(8000, () => console.log('SOAP server running at http://localhost:8000'));
در این مثال، ما یک سرویس SOAP را با متد sayHello تعریف می کنیم که یک نام دریافت می کند و یک پیام تبریک برمی گرداند.
کاربردهای SOAP:
- ادغام سازمانی
- خدمات وب تراکنش محور
- تبادل ساختاری داده ها