{"id":66334,"date":"2024-06-12T20:42:32","date_gmt":"2024-06-12T17:12:32","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/exploring-different-api-architecture-styles-graphql-grpc-sockets-and-soap-50ho\/"},"modified":"2024-06-12T20:42:32","modified_gmt":"2024-06-12T17:12:32","slug":"exploring-different-api-architecture-styles-graphql-grpc-sockets-and-soap-50ho","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/exploring-different-api-architecture-styles-graphql-grpc-sockets-and-soap-50ho\/","title":{"rendered":"\u06a9\u0627\u0648\u0634 \u062f\u0631 \u0633\u0628\u06a9 \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0645\u0639\u0645\u0627\u0631\u06cc API: GraphQL\u060c gRPC\u060c \u0633\u0648\u06a9\u062a \u0647\u0627 \u0648 SOAP"},"content":{"rendered":"<div data-article-id=\"1885914\" id=\"article-body\">\n<p>\u062f\u0631 \u062f\u0646\u06cc\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 API\u060c \u0627\u0646\u0648\u0627\u0639 \u0633\u0628\u06a9 \u0647\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06a9\u0647 \u0647\u0631 \u06a9\u062f\u0627\u0645 \u062f\u0627\u0631\u0627\u06cc \u0645\u0632\u0627\u06cc\u0627\u06cc \u062e\u0627\u0635 \u062e\u0648\u062f \u0648 \u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0627\u0635 \u0647\u0633\u062a\u0646\u062f.  \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0686\u0647\u0627\u0631 \u0645\u0648\u0631\u062f \u0627\u0632 \u0645\u062d\u0628\u0648\u0628\u200c\u062a\u0631\u06cc\u0646 \u0633\u0628\u06a9\u200c\u0647\u0627 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645: GraphQL\u060c gRPC\u060c Sockets \u0648 SOAP.  \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0645\u062b\u0627\u0644\u200c\u0647\u0627\u06cc \u06a9\u062f \u0639\u0645\u0644\u06cc\u060c \u0646\u062d\u0648\u0647 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0647\u0631 \u0633\u0628\u06a9 \u0648 \u0628\u062d\u062b \u062f\u0631 \u0645\u0648\u0631\u062f \u06a9\u0627\u0631\u0628\u0631\u062f \u0622\u0646\u200c\u0647\u0627 \u0631\u0627 \u062f\u0631 \u0633\u0646\u0627\u0631\u06cc\u0648\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u062e\u0648\u0627\u0647\u06cc\u0645 \u062f\u06cc\u062f.<\/p>\n<p>1) GraphQL:<br \/>GraphQL \u06cc\u06a9 \u0632\u0628\u0627\u0646 \u067e\u0631\u0633 \u0648 \u062c\u0648 \u0628\u0631\u0627\u06cc API\u0647\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u06cc\u0627\u0641\u062a\u0647 \u062a\u0648\u0633\u0637 \u0641\u06cc\u0633 \u0628\u0648\u06a9 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0645\u0634\u062a\u0631\u06cc\u0627\u0646 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u0641\u0642\u0637 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0646\u0646\u062f.  \u0645\u062f\u0644 \u062f\u0627\u062f\u0647 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0646\u0645\u0648\u062f\u0627\u0631 \u0622\u0646 \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631\u06cc \u0648 \u06a9\u0627\u0631\u0627\u06cc\u06cc \u0632\u06cc\u0627\u062f\u06cc \u062f\u0631 \u0627\u0646\u062a\u0642\u0627\u0644 \u062f\u0627\u062f\u0647 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f.  \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u062b\u0627\u0644\u06cc \u0627\u0632 \u0646\u062d\u0648\u0647 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0633\u0631\u0648\u0631 GraphQL \u062f\u0631 Node.js \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 graphql-yoga \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<p>\u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>const { GraphQLServer } = require('graphql-yoga');\n\n\/\/ Define the GraphQL schema\nconst typeDefs = `\n   type Query {\n     hello: String!\n   }\n`;\n\n\/\/ Resolvers\nconst resolvers = {\n   Query: {\n     hello: () =&gt; 'Hello world!',\n   },\n};\n\n\/\/ Create the GraphQL server\nconst server = new GraphQLServer({ typeDefs, resolvers });\n\n\/\/ Start the server\nserver.start(() =&gt; console.log('GraphQL server running at http:\/\/localhost:4000'));\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0633\u0627\u062f\u0647\u060c \u06cc\u06a9 \u0637\u0631\u062d\u0648\u0627\u0631\u0647 GraphQL \u0631\u0627 \u0628\u0627 \u06cc\u06a9 \u0641\u06cc\u0644\u062f hello \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u06cc\u06a9 \u0631\u0634\u062a\u0647 \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f.  \u0633\u067e\u0633\u060c \u0645\u0627 \u06cc\u06a9 Resolver \u0631\u0627 \u0628\u0631\u0627\u06cc \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a hello \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc GraphQL:<\/p>\n<ul>\n<li>\u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0648\u0628 \u062a\u0639\u0627\u0645\u0644\u06cc<\/li>\n<li>\u0645\u06cc\u06a9\u0631\u0648\u0633\u0631\u0648\u06cc\u0633 \u0647\u0627<\/li>\n<li>\u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0645\u0648\u0628\u0627\u06cc\u0644<\/li>\n<\/ul>\n<p>2) gRPC:<br \/>gRPC \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0646\u0628\u0639 \u0628\u0627\u0632 Remote Procedure Call (RPC) \u0627\u0633\u062a \u06a9\u0647 \u062a\u0648\u0633\u0637 Google \u062a\u0648\u0633\u0639\u0647 \u06cc\u0627\u0641\u062a\u0647 \u0627\u0633\u062a.  \u0627\u0632 HTTP\/2 \u0628\u0631\u0627\u06cc \u0627\u0631\u062a\u0628\u0627\u0637 \u0648 \u0627\u0632 \u0628\u0627\u0641\u0631\u0647\u0627\u06cc \u067e\u0631\u0648\u062a\u06a9\u0644 \u06af\u0648\u06af\u0644 (protobuf) \u0628\u0631\u0627\u06cc \u0633\u0631\u06cc\u0627\u0644 \u0633\u0627\u0632\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f.  \u062f\u0631 \u0632\u06cc\u0631 \u0645\u062b\u0627\u0644\u06cc \u0627\u0632 \u0646\u062d\u0648\u0647 \u062a\u0639\u0631\u06cc\u0641 \u0633\u0631\u0648\u06cc\u0633 gRPC \u0648 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0622\u0646 \u062f\u0631 Node.js \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<p>\u067e\u0631\u0648\u0628\u0648\u0641<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>\/\/ Define the service in a .proto file\nsyntax = \"proto3\";\n\nservice Greeter {\n   rpc SayHello (HelloRequest) returns (HelloResponse) {}\n}\n\nmessage HelloRequest {\n   string name = 1;\n}\n\nmessage HelloResponse {\n   string message = 1;\n}\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>const grpc = require('grpc');\nconst protoLoader = require('@grpc\/proto-loader');\n\n\/\/ Load the .proto file\nconst packageDefinition = protoLoader.loadSync('greeter.proto');\nconst { Greeter } = grpc.loadPackageDefinition(packageDefinition);\n\n\/\/ Implement the gRPC service\nfunction sayHello(call, callback) {\n   callback(null, { message: 'Hello ' + call.request.name });\n}\n\n\/\/ Create the gRPC server\nconst server = new grpc.Server();\nserver.addService(Greeter.service, { sayHello });\nserver.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure());\nserver.start();\nconsole.log('gRPC server running at http:\/\/localhost:50051');\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644\u060c \u0645\u0627 \u06cc\u06a9 \u0633\u0631\u0648\u06cc\u0633 Greeter \u0631\u0627 \u0628\u0627 \u0645\u062a\u062f SayHello \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0627 \u0646\u0627\u0645 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u062f \u0648 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u062a\u0628\u0631\u06cc\u06a9 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f.<\/p>\n<p>\u06a9\u0627\u0631\u0628\u0631\u062f\u0647\u0627\u06cc gRPC:<\/p>\n<ul>\n<li>\u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u062a\u0648\u0632\u06cc\u0639 \u0634\u062f\u0647<\/li>\n<li>\u0645\u06cc\u06a9\u0631\u0648\u0633\u0631\u0648\u06cc\u0633 \u0647\u0627\u06cc \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u067e\u0631\u0648\u062a\u06a9\u0644<\/li>\n<li>\u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0628\u0627 \u06a9\u0627\u0631\u0627\u06cc\u06cc \u0628\u0627\u0644\u0627<\/li>\n<\/ul>\n<p>3) \u0633\u0648\u06a9\u062a:<br \/>\u0633\u0648\u06a9\u062a \u0647\u0627 \u0631\u0627\u0647\u06cc \u0628\u0631\u0627\u06cc \u0627\u0631\u062a\u0628\u0627\u0637 \u062f\u0648\u0637\u0631\u0641\u0647 \u0628\u0644\u0627\u062f\u0631\u0646\u06af \u0628\u06cc\u0646 \u0645\u0634\u062a\u0631\u06cc \u0648 \u0633\u0631\u0648\u0631 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u0646\u062f.  \u0622\u0646\u0647\u0627 \u0628\u0647 \u0637\u0648\u0631 \u06af\u0633\u062a\u0631\u062f\u0647 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0686\u062a\u060c \u0628\u0627\u0632\u06cc \u0647\u0627\u06cc \u0622\u0646\u0644\u0627\u06cc\u0646 \u0648 \u067e\u062e\u0634 \u0632\u0646\u062f\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u0646\u062f.  \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u062b\u0627\u0644\u06cc \u0627\u0632 \u0646\u062d\u0648\u0647 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06cc\u06a9 \u0633\u0631\u0648\u0631 \u0686\u062a \u0633\u0627\u062f\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0633\u0648\u06a9\u062a \u0647\u0627 \u062f\u0631 Node.js \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<p>\u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>const net = require('net');\n\nconst server = net.createServer(socket =&gt; {\n   console.log('Client connected');\n\n   socket.on('data', data =&gt; {\n     console.log('Message received:', data.toString());\n     socket.write('Message received');\n   });\n\n   socket.on('end', () =&gt; {\n     console.log('Client disconnected');\n   });\n});\n\nserver.listen(3000, () =&gt; {\n   console.log('Chat server running on port 3000');\n});\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644\u060c \u0645\u0627 \u06cc\u06a9 \u0633\u0631\u0648\u0631 \u0633\u0648\u06a9\u062a \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0628\u0647 \u067e\u0648\u0631\u062a 3000 \u06af\u0648\u0634 \u0645\u06cc \u062f\u0647\u062f \u0648 \u0627\u062a\u0635\u0627\u0644\u0627\u062a \u0645\u0634\u062a\u0631\u06cc \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f.  \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u06cc\u06a9 \u0645\u0634\u062a\u0631\u06cc \u067e\u06cc\u0627\u0645\u06cc \u0631\u0627 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0633\u0631\u0648\u0631 \u0622\u0646 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0628\u0627 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u062a\u0623\u06cc\u06cc\u062f \u067e\u0627\u0633\u062e \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>\u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0633\u0648\u06a9\u062a:<\/p>\n<ul>\n<li>\u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0628\u0644\u0627\u062f\u0631\u0646\u06af<\/li>\n<li>\u0627\u0639\u0644\u0627\u0646 \u0647\u0627\u06cc \u0641\u0634\u0627\u0631\u06cc<\/li>\n<li>\u0646\u0638\u0627\u0631\u062a \u0627\u0632 \u0631\u0627\u0647 \u062f\u0648\u0631<\/li>\n<\/ul>\n<p>4) \u0635\u0627\u0628\u0648\u0646:<br \/>SOAP (\u067e\u0631\u0648\u062a\u06a9\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0627\u0634\u06cc\u0627\u0621 \u0633\u0627\u062f\u0647) \u06cc\u06a9 \u067e\u0631\u0648\u062a\u06a9\u0644 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 XML \u0628\u0631\u0627\u06cc \u062a\u0628\u0627\u062f\u0644 \u0633\u0627\u062e\u062a\u0627\u0631 \u06cc\u0627\u0641\u062a\u0647 \u067e\u06cc\u0627\u0645 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06cc\u06a9 \u0634\u0628\u06a9\u0647 \u06a9\u0627\u0645\u067e\u06cc\u0648\u062a\u0631\u06cc \u0627\u0633\u062a.  \u0627\u06af\u0631\u0686\u0647 \u062a\u0627 \u062d\u062f \u0632\u06cc\u0627\u062f\u06cc \u0628\u0627 \u0641\u0646\u0627\u0648\u0631\u06cc \u0647\u0627\u06cc \u0645\u062f\u0631\u0646 \u0645\u0627\u0646\u0646\u062f GraphQL \u0648 gRPC \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u0647\u0645\u0686\u0646\u0627\u0646 \u062f\u0631 \u0645\u062d\u06cc\u0637 \u0647\u0627\u06cc \u0633\u0627\u0632\u0645\u0627\u0646\u06cc \u0642\u062f\u06cc\u0645\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f.  \u062f\u0631 \u0632\u06cc\u0631 \u0645\u062b\u0627\u0644\u06cc \u0627\u0632 \u0646\u062d\u0648\u0647 \u062a\u0639\u0631\u06cc\u0641 \u0633\u0631\u0648\u06cc\u0633 SOAP \u0648 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0622\u0646 \u062f\u0631 Node.js \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 soap \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<p>\u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>const soap = require('soap');\n\n\/\/ Define the SOAP service\nconst service = {\n   HelloService: {\n     HelloPort: {\n       sayHello: args =&gt; {\n         return { message: 'Hello ' + args.name };\n       },\n     },\n   },\n};\n\n\/\/ Create the SOAP server\nconst xml = require('fs').readFileSync('hello.wsdl', 'utf8');\nconst server = soap.createServer({ services: service, xml: xml });\n\n\/\/ Start the server\nserver.listen(8000, () =&gt; console.log('SOAP server running at http:\/\/localhost:8000'));\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644\u060c \u0645\u0627 \u06cc\u06a9 \u0633\u0631\u0648\u06cc\u0633 SOAP \u0631\u0627 \u0628\u0627 \u0645\u062a\u062f sayHello \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u06cc\u06a9 \u0646\u0627\u0645 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u062f \u0648 \u06cc\u06a9 \u067e\u06cc\u0627\u0645 \u062a\u0628\u0631\u06cc\u06a9 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f.<\/p>\n<p>\u06a9\u0627\u0631\u0628\u0631\u062f\u0647\u0627\u06cc SOAP:<\/p>\n<ul>\n<li>\u0627\u062f\u063a\u0627\u0645 \u0633\u0627\u0632\u0645\u0627\u0646\u06cc<\/li>\n<li>\u062e\u062f\u0645\u0627\u062a \u0648\u0628 \u062a\u0631\u0627\u06a9\u0646\u0634 \u0645\u062d\u0648\u0631<\/li>\n<li>\u062a\u0628\u0627\u062f\u0644 \u0633\u0627\u062e\u062a\u0627\u0631\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627<\/li>\n<\/ul><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u062f\u0631 \u062f\u0646\u06cc\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 API\u060c \u0627\u0646\u0648\u0627\u0639 \u0633\u0628\u06a9 \u0647\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06a9\u0647 \u0647\u0631 \u06a9\u062f\u0627\u0645 \u062f\u0627\u0631\u0627\u06cc \u0645\u0632\u0627\u06cc\u0627\u06cc \u062e\u0627\u0635 \u062e\u0648\u062f \u0648 \u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0627\u0635 \u0647\u0633\u062a\u0646\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0686\u0647\u0627\u0631 \u0645\u0648\u0631\u062f \u0627\u0632 \u0645\u062d\u0628\u0648\u0628\u200c\u062a\u0631\u06cc\u0646 \u0633\u0628\u06a9\u200c\u0647\u0627 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645: GraphQL\u060c gRPC\u060c Sockets \u0648 SOAP. \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0645\u062b\u0627\u0644\u200c\u0647\u0627\u06cc \u06a9\u062f \u0639\u0645\u0644\u06cc\u060c \u0646\u062d\u0648\u0647 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0647\u0631 \u0633\u0628\u06a9 \u0648 \u0628\u062d\u062b \u062f\u0631 \u0645\u0648\u0631\u062f \u06a9\u0627\u0631\u0628\u0631\u062f \u0622\u0646\u200c\u0647\u0627 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":66335,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-66334","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/66334","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=66334"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/66334\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/66335"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=66334"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=66334"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=66334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}