{"id":68892,"date":"2024-07-11T02:14:56","date_gmt":"2024-07-10T22:44:56","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/different-problem-one-solution-api-gateways-j1d\/"},"modified":"2024-07-11T02:14:56","modified_gmt":"2024-07-10T22:44:56","slug":"different-problem-one-solution-api-gateways-j1d","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/different-problem-one-solution-api-gateways-j1d\/","title":{"rendered":"\u0645\u0634\u06a9\u0644 \u0645\u062a\u0641\u0627\u0648\u062a\u060c \u06cc\u06a9 \u0631\u0627\u0647 \u062d\u0644: \u062f\u0631\u0648\u0627\u0632\u0647 \u0647\u0627\u06cc API"},"content":{"rendered":"<p>Summarize this content to 400 words in Persian Lang<br \/>\n            \u062f\u0631\u0648\u062f \u0628\u0631 \u0647\u0645\u06a9\u0627\u0631 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646\u060c \u0627\u0639\u0645 \u0627\u0632 \u0628\u0627 \u062a\u062c\u0631\u0628\u0647 \u0648 \u062a\u0627\u0632\u0647 \u0648\u0627\u0631\u062f.<\/p>\n<p>\u0622\u06cc\u0627 \u062a\u0627 \u0628\u0647 \u062d\u0627\u0644 \u0645\u062a\u0648\u062c\u0647 \u0634\u062f\u0647 \u0627\u06cc\u062f \u06a9\u0647 \u0628\u0627 API \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u0633\u0631\u0648\u06a9\u0627\u0631 \u062f\u0627\u0631\u06cc\u062f \u06a9\u0647 \u062f\u0627\u0631\u0627\u06cc \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0645\u0646\u062c\u0631 \u0628\u0647 \u0633\u0631\u062f\u0631\u06af\u0645\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u06cc\u0646\u06a9\u0647 \u0641\u0631\u0627\u0646\u062a \u0627\u0646\u062f \u0628\u0627\u06cc\u062f \u0628\u0647 \u06a9\u062f\u0627\u0645 \u06cc\u06a9 \u0627\u0632 \u0622\u0646\u0647\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f\u061f  \u0634\u0627\u06cc\u062f \u0634\u0645\u0627 \u062d\u062a\u06cc \u0628\u0647 \u0637\u0648\u0631 \u062a\u0635\u0627\u062f\u0641\u06cc \u062a\u0645\u0627\u0645 \u067e\u0627\u0633\u062e\u200c\u0647\u0627\u06cc \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0631\u0627 \u062f\u0631 \u0645\u0639\u0631\u0636 \u062f\u06cc\u062f \u0641\u0631\u0627\u0646\u062a\u200c\u0627\u0646\u062f \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0647 \u0628\u0627\u0634\u06cc\u062f.<\/p>\n<p>\u0631\u0627\u0647 \u062d\u0644\u06cc \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0645\u0634\u06a9\u0644 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f: \u062f\u0631\u0648\u0627\u0632\u0647 API.<\/p>\n<p>  API Gateway \u0686\u06cc\u0633\u062a\u061f<\/p>\n<p>API Gateway \u0633\u0631\u0648\u06cc\u0633\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0648 \u0627\u06cc\u0645\u0646 \u0633\u0627\u0632\u06cc API \u0647\u0627 (\u0631\u0627\u0628\u0637 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0628\u0631\u0646\u0627\u0645\u0647) \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f.  \u0627\u06cc\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u062f\u0631\u0628 \u0648\u0631\u0648\u062f\u06cc \u0628\u0631\u0627\u06cc API \u0647\u0627 \u0639\u0645\u0644 \u0645\u06cc \u06a9\u0646\u062f\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627 \u0631\u0627 \u0628\u0647 \u062e\u062f\u0645\u0627\u062a \u0628\u0627\u0637\u0646 \u0645\u0646\u0627\u0633\u0628 \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f\u060c \u0646\u0633\u062e\u0647 API\u060c \u0627\u0645\u0646\u06cc\u062a \u0648 \u06a9\u0646\u062a\u0631\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f\u060c \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062f\u0646 \u0646\u0631\u062e \u0648 \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f.  \u0628\u0647 \u0639\u0628\u0627\u0631\u062a \u0633\u0627\u062f\u0647 \u062a\u0631\u060c API Gateway \u0627\u0631\u062a\u0628\u0627\u0637 \u0648 \u062a\u0639\u0627\u0645\u0644 \u0628\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0646\u0631\u0645 \u0627\u0641\u0632\u0627\u0631\u06cc \u0645\u062e\u062a\u0644\u0641 \u0631\u0627 \u062a\u0633\u0647\u06cc\u0644 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0641\u0631\u0636 \u06a9\u0646\u06cc\u062f \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u062c\u0627\u0631\u062a \u0627\u0644\u06a9\u062a\u0631\u0648\u0646\u06cc\u06a9 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0628\u0627 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0645\u0627\u0646\u0646\u062f \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631\u060c \u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u062d\u0635\u0648\u0644 \u0648 \u0633\u0641\u0627\u0631\u0634 \u062f\u0627\u0631\u06cc\u062f.  \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a API \u0647\u0627\u06cc \u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 Amazon API Gateway \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.  \u0628\u0627 API Gateway\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc API \u0645\u062e\u062a\u0644\u0641 \u0628\u0631\u0627\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631\u060c \u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u062d\u0635\u0648\u0644 \u0648 \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 \u0633\u0641\u0627\u0631\u0634 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f. <\/p>\n<p>\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc API \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f \/auth \u0628\u0631\u0627\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u06a9\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0623\u06cc\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u06cc\u06a9 \u062a\u0627\u0628\u0639 Lambda \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f.  \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062f\u06cc\u06af\u0631 \/products \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc \u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u062d\u0635\u0648\u0644 \u0631\u0627 \u0628\u0627 \u0627\u062a\u0635\u0627\u0644 \u0628\u0647 \u06cc\u06a9 \u0633\u0631\u0648\u06cc\u0633 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646 \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u06a9\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062d\u0635\u0648\u0644 \u0631\u0627 \u0627\u0632 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc \u06a9\u0646\u062f\u060c \u0631\u0633\u06cc\u062f\u06af\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u0646\u0633\u062e\u0647\u200c\u0633\u0627\u0632\u06cc API \u0631\u0627 \u0628\u0627 \u0627\u06cc\u062c\u0627\u062f \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0627\u0632 API\u0647\u0627 \u0628\u0631\u0627\u06cc \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0628\u0647 \u0639\u0642\u0628 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u0645.  API Gateway \u0628\u0647 \u0634\u0645\u0627 \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0628\u062f\u0648\u0646 \u0627\u06cc\u062c\u0627\u062f \u0627\u062e\u062a\u0644\u0627\u0644 \u062f\u0631 \u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0631\u0646\u0627\u0645\u0647\u060c \u0646\u0633\u062e\u0647 \u0647\u0627 \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0631\u062f\u0647 \u0648 \u0628\u06cc\u0646 \u0622\u0646\u0647\u0627 \u0633\u0648\u0626\u06cc\u0686 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0644\u06cc\u062f API \u06cc\u0627 \u0627\u062f\u063a\u0627\u0645 \u0628\u0627 \u0646\u0642\u0634\u200c\u0647\u0627\u06cc IAM \u0628\u0631\u0627\u06cc \u06a9\u0646\u062a\u0631\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 API\u0647\u0627\u06cc \u062e\u0627\u0635\u060c \u0627\u0645\u0646\u06cc\u062a \u0631\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u062f\u0647\u06cc\u062f.  \u0628\u0627 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062f\u0646 \u0646\u0631\u062e\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062f\u0646 \u062a\u0639\u062f\u0627\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u062f\u0631 \u06cc\u06a9 \u0628\u0627\u0632\u0647 \u0632\u0645\u0627\u0646\u06cc \u062e\u0627\u0635 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u062f\u060c \u0627\u0632 \u0633\u0648\u0621 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 API\u0647\u0627 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 API Gateway \u062f\u0631 \u0627\u06cc\u0646 \u0633\u0646\u0627\u0631\u06cc\u0648\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u062c\u0627\u0631\u062a \u0627\u0644\u06a9\u062a\u0631\u0648\u0646\u06cc\u06a9 \u062a\u0644\u0641\u0646 \u0647\u0645\u0631\u0627\u0647 \u062e\u0648\u062f \u0648 \u062e\u062f\u0645\u0627\u062a \u0628\u0627\u0637\u0646 \u0631\u0627 \u0628\u0647 \u0637\u0648\u0631 \u0645\u0624\u062b\u0631 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0648 \u0627\u06cc\u0645\u0646 \u06a9\u0646\u06cc\u062f \u0648 \u062a\u062c\u0631\u0628\u0647\u200c\u0627\u06cc \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0648 \u0645\u062d\u0627\u0641\u0638\u062a \u0634\u062f\u0647 \u0631\u0627 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062e\u0648\u062f \u062a\u0636\u0645\u06cc\u0646 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0628\u0631\u062e\u06cc \u0627\u0632 \u0646\u0645\u0648\u0646\u0647 \u0647\u0627\u06cc \u067e\u0631\u06a9\u0627\u0631\u0628\u0631\u062f API Gateway \u0639\u0628\u0627\u0631\u062a\u0646\u062f \u0627\u0632 AWS API Gateway\u060c Azure API Management\u060c Google Cloud Endpoints \u0648 Kong.<\/p>\n<p>  \u06a9\u0627\u0631 \u062f\u0631 \u062d\u0627\u0644 \u0627\u0646\u062c\u0627\u0645<\/p>\n<p>\u067e\u0633 \u0627\u0632 \u062f\u0631\u06a9 What\u060c \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u0628\u0647 \u0686\u06af\u0648\u0646\u0647 \u062d\u0631\u06a9\u062a \u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639\u060c \u06cc\u06a9 \u0645\u062e\u0632\u0646 \u062e\u0627\u0644\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/p>\n<p>mkdir api-gateway<\/p>\n<p>\u0633\u067e\u0633 npm \u0631\u0627 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0646\u06cc\u062f<\/p>\n<p>npm init<\/p>\n<p>\u067e\u0633 \u0627\u0632 \u062a\u0646\u0638\u06cc\u0645 \u0627\u0648\u0644\u06cc\u0647 npm\u060c \u0627\u0642\u062f\u0627\u0645 \u0628\u0647 \u0646\u0635\u0628 \u0628\u0633\u062a\u0647 \u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0646\u06cc\u062f<\/p>\n<p>npm i express nodemon morgan express-rate-limit axios<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f index.js \u062f\u0631 \u0645\u062e\u0632\u0646 \u0641\u0627\u06cc\u0644 \u06a9\u0646\u06cc\u062f \u0648 \u0646\u062a\u06cc\u062c\u0647 \u0646\u0647\u0627\u06cc\u06cc \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u0634\u0628\u06cc\u0647 \u0627\u06cc\u0646 \u0628\u0627\u0634\u062f.<\/p>\n<p>\u0627\u0632 \u0627\u06cc\u062c\u0627\u062f \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062c\u0632\u0626\u06cc \u062f\u0631 \u062f\u0627\u062e\u0644 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f package.json \u0641\u0627\u06cc\u0644 \u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639 nodemon.  \u0628\u0647 \u0635\u0648\u0631\u062a \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f &#8220;type&#8221;: &#8220;module&#8221; \u0628\u0631\u0627\u06cc \u0627\u062f\u0627\u0645\u0647 \u0628\u0627 ES6\u060c \u0627\u06af\u0631\u0686\u0647 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0645\u0627 \u062f\u0631 CommonJs \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f.<\/p>\n<p>\u0634\u0631\u0648\u0639 \u0628\u0627 \u0648\u0627\u0631\u062f\u0627\u062a \u0636\u0631\u0648\u0631\u06cc\u060c<\/p>\n<p>const express = require(&#8216;express&#8217;);<br \/>\nconst axios = require(&#8216;axios&#8217;);<br \/>\nconst rateLimit = require(&#8216;express-rate-limit&#8217;);<br \/>\nconst morgan = require(&#8216;morgan&#8217;);<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0628\u0631\u0646\u0627\u0645\u0647<\/p>\n<p>const app = express();<br \/>\nconst PORT = 3000;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062a\u0648\u062c\u0647: \u0627\u06af\u0631\u0686\u0647 CORS \u062f\u0631 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0622\u0646 \u0636\u0631\u0648\u0631\u06cc \u0627\u0633\u062a.<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0645\u06cc\u0627\u0646 \u0627\u0641\u0632\u0627\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0648\u0631\u06af\u0627\u0646 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u0645<\/p>\n<p>const limiter = rateLimit({<br \/>\n  windowMs: 15 * 60 * 1000, \/\/ 15 minutes<br \/>\n  max: 100 \/\/ limit each IP to 100 requests per windowMs<br \/>\n});<br \/>\napp.use(limiter);<\/p>\n<p>app.use(morgan(&#8216;combined&#8217;));<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0648 \u0628\u0631\u0627\u06cc \u0645\u06cc\u0627\u0646 \u0627\u0641\u0632\u0627\u0631\u0647\u0627\u06cc \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u062e\u0637\u0627<\/p>\n<p>const handleError = (err, req, res, next) =&gt; {<br \/>\n  console.error(err);<br \/>\n  res.status(500).send(&#8216;Internal Server Error&#8217;);<br \/>\n};<br \/>\napp.use(handleError);<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644\u060c \u0645\u0627 \u0627\u0632 API\u0647\u0627\u06cc \u0633\u0627\u062e\u062a\u06af\u06cc \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 JSONPlaceHolder \u0648 ReqRes \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n<p>JSONPlaceHolder<\/p>\n<p>\/posts  &#8211; \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u06cc \u0627\u0632 \u067e\u0633\u062a \u0647\u0627 \u0631\u0627 \u0648\u0627\u06a9\u0634\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\/comments  &#8211; \u0628\u0647 \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u06cc \u0627\u0632 \u0646\u0638\u0631\u0627\u062a \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f.<\/p>\n<p>\/albums  &#8211; \u0641\u0647\u0631\u0633\u062a\u06cc \u0627\u0632 \u0622\u0644\u0628\u0648\u0645 \u0647\u0627 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\/photos  &#8211; \u06cc\u06a9 \u0633\u0631\u06cc \u0639\u06a9\u0633 \u062a\u0647\u06cc\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\/todos  &#8211; \u062e\u0644\u0627\u0635\u0647 \u0627\u06cc \u0627\u0632 \u06a9\u0627\u0631\u0647\u0627 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\/users  &#8211; \u062b\u0628\u062a \u0646\u0627\u0645 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>RegRes<\/p>\n<p>\/login  &#8211; \u0628\u0631\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0648\u0631\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>app.use(&#8216;\/api&#8217;, async (req, res, next) =&gt; { &#8230; }<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062f\u0631 \u062f\u0627\u062e\u0644 \u0627\u062c\u0631\u0627 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f try \u0648 catch \u0631\u0648\u0634<\/p>\n<p>try{ &#8230; } catch (error) { &#8230; }<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062f\u0627\u062e\u0644 try \u0628\u06cc\u0627\u06cc\u06cc\u062f \u06a9\u0627\u0631 \u0627\u0635\u0644\u06cc \u0631\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u0645<\/p>\n<p>let response;<br \/>\nconst path = req.path;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>if (<br \/>\n    path.startsWith(&#8220;\/posts&#8221;) ||<br \/>\n    path.startsWith(&#8220;\/comments&#8221;) ||<br \/>\n    path.startsWith(&#8220;\/albums&#8221;) ||<br \/>\n    path.startsWith(&#8220;\/photos&#8221;) ||<br \/>\n    path.startsWith(&#8220;\/todos&#8221;) ||<br \/>\n    path.startsWith(&#8220;\/users&#8221;)<br \/>\n) {<br \/>\n    \/\/ Route to JSONPlaceholder<br \/>\n    response = await axios.get(`https:\/\/jsonplaceholder.typicode.com${path}`);<br \/>\n} else if (path.startsWith(&#8220;\/reqres-users&#8221;)) {<br \/>\n    \/\/ Route to ReqRes<br \/>\n    response = await axios.get(`https:\/\/reqres.in\/api${path}`);<br \/>\n} else if (path.startsWith(&#8220;\/reqres-login&#8221;)) {<br \/>\n    \/\/ Handle ReqRes login<br \/>\n    response = await axios.post(&#8220;https:\/\/reqres.in\/api\/login&#8221;, {<br \/>\n      email: &#8220;eve.holt@reqres.in&#8221;,<br \/>\n      password: &#8220;cityslicka&#8221;,<br \/>\n  });<br \/>\n} else {<br \/>\n    res.status(404).send(&#8220;Endpoint not found&#8221;);<br \/>\n    return;<br \/>\n}<\/p>\n<p>res.json(response.data);<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0648 \u0647\u0645\u06cc\u0646 \u0627\u0633\u062a.  \u0645\u0627 \u0627\u062c\u0631\u0627\u06cc \u0627\u0648\u0644\u06cc\u0646 API Gateway \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u067e\u0627\u06cc\u0627\u0646 \u0631\u0633\u0627\u0646\u062f\u06cc\u0645.<\/p>\n<p>\u06a9\u062f \u06a9\u0644\u06cc \u0628\u0627\u06cc\u062f \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644 \u0628\u0627\u0634\u062f.<\/p>\n<p>const express = require(&#8220;express&#8221;);<br \/>\nconst axios = require(&#8220;axios&#8221;);<br \/>\nconst rateLimit = require(&#8220;express-rate-limit&#8221;);<br \/>\nconst morgan = require(&#8220;morgan&#8221;);<\/p>\n<p>const app = express();<br \/>\nconst PORT = 3000;<\/p>\n<p>const limiter = rateLimit({<br \/>\n  windowMs: 15 * 60 * 1000, \/\/ 15 minutes<br \/>\n  max: 100, \/\/ limit each IP to 100 requests per windowMs<br \/>\n});<br \/>\napp.use(limiter);<\/p>\n<p>app.use(morgan(&#8220;combined&#8221;));<\/p>\n<p>\/\/ Error Handling Middleware<br \/>\nconst handleError = (err, req, res, next) =&gt; {<br \/>\n  console.error(err);<br \/>\n  res.status(500).send(&#8220;Internal Server Error&#8221;);<br \/>\n};<br \/>\napp.use(handleError);<\/p>\n<p>\/\/ Unified API endpoint<br \/>\napp.use(&#8220;\/api&#8221;, async (req, res, next) =&gt; {<br \/>\n  try {<br \/>\n    let response;<br \/>\n    const path = req.path;<\/p>\n<p>    if (<br \/>\n      path.startsWith(&#8220;\/posts&#8221;) ||<br \/>\n      path.startsWith(&#8220;\/comments&#8221;) ||<br \/>\n      path.startsWith(&#8220;\/albums&#8221;) ||<br \/>\n      path.startsWith(&#8220;\/photos&#8221;) ||<br \/>\n      path.startsWith(&#8220;\/todos&#8221;) ||<br \/>\n      path.startsWith(&#8220;\/users&#8221;)<br \/>\n    ) {<br \/>\n      \/\/ Route to JSONPlaceholder<br \/>\n      response = await axios.get(`https:\/\/jsonplaceholder.typicode.com${path}`);<br \/>\n    } else if (path.startsWith(&#8220;\/reqres-users&#8221;)) {<br \/>\n      \/\/ Route to ReqRes<br \/>\n      response = await axios.get(`https:\/\/reqres.in\/api${path}`);<br \/>\n    } else if (path.startsWith(&#8220;\/reqres-login&#8221;)) {<br \/>\n      \/\/ Handle ReqRes login<br \/>\n      response = await axios.post(&#8220;https:\/\/reqres.in\/api\/login&#8221;, {<br \/>\n        email: &#8220;eve.holt@reqres.in&#8221;,<br \/>\n        password: &#8220;cityslicka&#8221;,<br \/>\n      });<br \/>\n    } else {<br \/>\n      res.status(404).send(&#8220;Endpoint not found&#8221;);<br \/>\n      return;<br \/>\n    }<\/p>\n<p>    res.json(response.data);<br \/>\n  } catch (error) {<br \/>\n    next(error);<br \/>\n  }<br \/>\n});<\/p>\n<p>app.listen(PORT, () =&gt; {<br \/>\n  console.log(`API Gateway running on port ${PORT}`);<br \/>\n});<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u062a\u0633\u062a \u0648 \u0646\u062a\u0627\u06cc\u062c<\/p>\n<p>\u0648\u0642\u062a \u0622\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc API \u062e\u0648\u062f \u0631\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u0645\u060c \u0645\u0646 \u0627\u0632 Insomnia \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0645\u060c \u0627\u0645\u0627 \u0634\u0645\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0647\u0631 \u06a9\u062f\u0627\u0645 \u0627\u0632 \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0647\u0627\u06cc \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f\u060c \u0645\u0637\u0645\u0626\u0646\u0627\u064b\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0627\u062f\u0627\u0645\u0647 \u062f\u0647\u06cc\u0645 \u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc \u0631\u0627 \u0628\u0647 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc API \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0628\u0628\u06cc\u0646\u06cc\u0645 \u0622\u06cc\u0627 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0627\u0646\u062a\u0638\u0627\u0631 \u0645\u06cc\u200c\u0631\u0648\u062f \u06a9\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06cc\u0627 \u062e\u06cc\u0631.<\/p>\n<p>\u0628\u0647 \u0647\u06a9 \u06a9\u0631\u062f\u0646 \u0627\u062f\u0627\u0645\u0647 \u062f\u0647\u06cc\u062f!<\/p>\n<div data-article-id=\"1901705\" id=\"article-body\">\n<p>\u062f\u0631\u0648\u062f \u0628\u0631 \u0647\u0645\u06a9\u0627\u0631 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646\u060c \u0627\u0639\u0645 \u0627\u0632 \u0628\u0627 \u062a\u062c\u0631\u0628\u0647 \u0648 \u062a\u0627\u0632\u0647 \u0648\u0627\u0631\u062f.<\/p>\n<p>\u0622\u06cc\u0627 \u062a\u0627 \u0628\u0647 \u062d\u0627\u0644 \u0645\u062a\u0648\u062c\u0647 \u0634\u062f\u0647 \u0627\u06cc\u062f \u06a9\u0647 \u0628\u0627 API \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u0633\u0631\u0648\u06a9\u0627\u0631 \u062f\u0627\u0631\u06cc\u062f \u06a9\u0647 \u062f\u0627\u0631\u0627\u06cc \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0645\u0646\u062c\u0631 \u0628\u0647 \u0633\u0631\u062f\u0631\u06af\u0645\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u06cc\u0646\u06a9\u0647 \u0641\u0631\u0627\u0646\u062a \u0627\u0646\u062f \u0628\u0627\u06cc\u062f \u0628\u0647 \u06a9\u062f\u0627\u0645 \u06cc\u06a9 \u0627\u0632 \u0622\u0646\u0647\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f\u061f  \u0634\u0627\u06cc\u062f \u0634\u0645\u0627 \u062d\u062a\u06cc \u0628\u0647 \u0637\u0648\u0631 \u062a\u0635\u0627\u062f\u0641\u06cc \u062a\u0645\u0627\u0645 \u067e\u0627\u0633\u062e\u200c\u0647\u0627\u06cc \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0631\u0627 \u062f\u0631 \u0645\u0639\u0631\u0636 \u062f\u06cc\u062f \u0641\u0631\u0627\u0646\u062a\u200c\u0627\u0646\u062f \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0647 \u0628\u0627\u0634\u06cc\u062f.<\/p>\n<p>\u0631\u0627\u0647 \u062d\u0644\u06cc \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0645\u0634\u06a9\u0644 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f: \u062f\u0631\u0648\u0627\u0632\u0647 API.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/different-problem-one-solution-api-gateways-j1d\/#API_Gateway_%DA%86%DB%8C%D8%B3%D8%AA%D8%9F\" >API Gateway \u0686\u06cc\u0633\u062a\u061f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/different-problem-one-solution-api-gateways-j1d\/#%DA%A9%D8%A7%D8%B1_%D8%AF%D8%B1_%D8%AD%D8%A7%D9%84_%D8%A7%D9%86%D8%AC%D8%A7%D9%85\" >\u06a9\u0627\u0631 \u062f\u0631 \u062d\u0627\u0644 \u0627\u0646\u062c\u0627\u0645<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/different-problem-one-solution-api-gateways-j1d\/#%D8%AA%D8%B3%D8%AA_%D9%88_%D9%86%D8%AA%D8%A7%DB%8C%D8%AC\" >\u062a\u0633\u062a \u0648 \u0646\u062a\u0627\u06cc\u062c<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"API_Gateway_%DA%86%DB%8C%D8%B3%D8%AA%D8%9F\"><\/span>\n<p>  API Gateway \u0686\u06cc\u0633\u062a\u061f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>API Gateway \u0633\u0631\u0648\u06cc\u0633\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0648 \u0627\u06cc\u0645\u0646 \u0633\u0627\u0632\u06cc API \u0647\u0627 (\u0631\u0627\u0628\u0637 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0628\u0631\u0646\u0627\u0645\u0647) \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f.  \u0627\u06cc\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u062f\u0631\u0628 \u0648\u0631\u0648\u062f\u06cc \u0628\u0631\u0627\u06cc API \u0647\u0627 \u0639\u0645\u0644 \u0645\u06cc \u06a9\u0646\u062f\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627 \u0631\u0627 \u0628\u0647 \u062e\u062f\u0645\u0627\u062a \u0628\u0627\u0637\u0646 \u0645\u0646\u0627\u0633\u0628 \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f\u060c \u0646\u0633\u062e\u0647 API\u060c \u0627\u0645\u0646\u06cc\u062a \u0648 \u06a9\u0646\u062a\u0631\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f\u060c \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062f\u0646 \u0646\u0631\u062e \u0648 \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f.  \u0628\u0647 \u0639\u0628\u0627\u0631\u062a \u0633\u0627\u062f\u0647 \u062a\u0631\u060c API Gateway \u0627\u0631\u062a\u0628\u0627\u0637 \u0648 \u062a\u0639\u0627\u0645\u0644 \u0628\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0646\u0631\u0645 \u0627\u0641\u0632\u0627\u0631\u06cc \u0645\u062e\u062a\u0644\u0641 \u0631\u0627 \u062a\u0633\u0647\u06cc\u0644 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p><\/p>\n<p>\u0641\u0631\u0636 \u06a9\u0646\u06cc\u062f \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u062c\u0627\u0631\u062a \u0627\u0644\u06a9\u062a\u0631\u0648\u0646\u06cc\u06a9 \u0645\u0648\u0628\u0627\u06cc\u0644 \u0628\u0627 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0645\u0627\u0646\u0646\u062f \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631\u060c \u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u062d\u0635\u0648\u0644 \u0648 \u0633\u0641\u0627\u0631\u0634 \u062f\u0627\u0631\u06cc\u062f.  \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a API \u0647\u0627\u06cc \u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 Amazon API Gateway \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.  \u0628\u0627 API Gateway\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc API \u0645\u062e\u062a\u0644\u0641 \u0628\u0631\u0627\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631\u060c \u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u062d\u0635\u0648\u0644 \u0648 \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 \u0633\u0641\u0627\u0631\u0634 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f. <\/p>\n<p>\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc API \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f <code>\/auth<\/code> \u0628\u0631\u0627\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u06a9\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0623\u06cc\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u06cc\u06a9 \u062a\u0627\u0628\u0639 Lambda \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f.  \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062f\u06cc\u06af\u0631 <code>\/products<\/code> \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc \u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u062d\u0635\u0648\u0644 \u0631\u0627 \u0628\u0627 \u0627\u062a\u0635\u0627\u0644 \u0628\u0647 \u06cc\u06a9 \u0633\u0631\u0648\u06cc\u0633 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646 \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u06a9\u0647 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062d\u0635\u0648\u0644 \u0631\u0627 \u0627\u0632 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc \u06a9\u0646\u062f\u060c \u0631\u0633\u06cc\u062f\u06af\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u0646\u0633\u062e\u0647\u200c\u0633\u0627\u0632\u06cc API \u0631\u0627 \u0628\u0627 \u0627\u06cc\u062c\u0627\u062f \u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0627\u0632 API\u0647\u0627 \u0628\u0631\u0627\u06cc \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0628\u0647 \u0639\u0642\u0628 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u0645.  API Gateway \u0628\u0647 \u0634\u0645\u0627 \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0628\u062f\u0648\u0646 \u0627\u06cc\u062c\u0627\u062f \u0627\u062e\u062a\u0644\u0627\u0644 \u062f\u0631 \u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0631\u0646\u0627\u0645\u0647\u060c \u0646\u0633\u062e\u0647 \u0647\u0627 \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0631\u062f\u0647 \u0648 \u0628\u06cc\u0646 \u0622\u0646\u0647\u0627 \u0633\u0648\u0626\u06cc\u0686 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0644\u06cc\u062f API \u06cc\u0627 \u0627\u062f\u063a\u0627\u0645 \u0628\u0627 \u0646\u0642\u0634\u200c\u0647\u0627\u06cc IAM \u0628\u0631\u0627\u06cc \u06a9\u0646\u062a\u0631\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 API\u0647\u0627\u06cc \u062e\u0627\u0635\u060c \u0627\u0645\u0646\u06cc\u062a \u0631\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u062f\u0647\u06cc\u062f.  \u0628\u0627 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062f\u0646 \u0646\u0631\u062e\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062f\u0646 \u062a\u0639\u062f\u0627\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u062f\u0631 \u06cc\u06a9 \u0628\u0627\u0632\u0647 \u0632\u0645\u0627\u0646\u06cc \u062e\u0627\u0635 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u062f\u060c \u0627\u0632 \u0633\u0648\u0621 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 API\u0647\u0627 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 API Gateway \u062f\u0631 \u0627\u06cc\u0646 \u0633\u0646\u0627\u0631\u06cc\u0648\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u062c\u0627\u0631\u062a \u0627\u0644\u06a9\u062a\u0631\u0648\u0646\u06cc\u06a9 \u062a\u0644\u0641\u0646 \u0647\u0645\u0631\u0627\u0647 \u062e\u0648\u062f \u0648 \u062e\u062f\u0645\u0627\u062a \u0628\u0627\u0637\u0646 \u0631\u0627 \u0628\u0647 \u0637\u0648\u0631 \u0645\u0624\u062b\u0631 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0648 \u0627\u06cc\u0645\u0646 \u06a9\u0646\u06cc\u062f \u0648 \u062a\u062c\u0631\u0628\u0647\u200c\u0627\u06cc \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0648 \u0645\u062d\u0627\u0641\u0638\u062a \u0634\u062f\u0647 \u0631\u0627 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062e\u0648\u062f \u062a\u0636\u0645\u06cc\u0646 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0628\u0631\u062e\u06cc \u0627\u0632 \u0646\u0645\u0648\u0646\u0647 \u0647\u0627\u06cc \u067e\u0631\u06a9\u0627\u0631\u0628\u0631\u062f API Gateway \u0639\u0628\u0627\u0631\u062a\u0646\u062f \u0627\u0632 AWS API Gateway\u060c Azure API Management\u060c Google Cloud Endpoints \u0648 Kong.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%DA%A9%D8%A7%D8%B1_%D8%AF%D8%B1_%D8%AD%D8%A7%D9%84_%D8%A7%D9%86%D8%AC%D8%A7%D9%85\"><\/span>\n<p>  \u06a9\u0627\u0631 \u062f\u0631 \u062d\u0627\u0644 \u0627\u0646\u062c\u0627\u0645<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u067e\u0633 \u0627\u0632 \u062f\u0631\u06a9 What\u060c \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u0628\u0647 \u0686\u06af\u0648\u0646\u0647 \u062d\u0631\u06a9\u062a \u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639\u060c \u06cc\u06a9 \u0645\u062e\u0632\u0646 \u062e\u0627\u0644\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/p>\n<p><code>mkdir api-gateway<\/code><\/p>\n<p>\u0633\u067e\u0633 npm \u0631\u0627 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0646\u06cc\u062f<\/p>\n<p><code>npm init<\/code><\/p>\n<p>\u067e\u0633 \u0627\u0632 \u062a\u0646\u0638\u06cc\u0645 \u0627\u0648\u0644\u06cc\u0647 npm\u060c \u0627\u0642\u062f\u0627\u0645 \u0628\u0647 \u0646\u0635\u0628 \u0628\u0633\u062a\u0647 \u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0646\u06cc\u062f<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>npm i express nodemon morgan express-rate-limit axios\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>\u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f <code>index.js<\/code> \u062f\u0631 \u0645\u062e\u0632\u0646 \u0641\u0627\u06cc\u0644 \u06a9\u0646\u06cc\u062f \u0648 \u0646\u062a\u06cc\u062c\u0647 \u0646\u0647\u0627\u06cc\u06cc \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u0634\u0628\u06cc\u0647 \u0627\u06cc\u0646 \u0628\u0627\u0634\u062f.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media.dev.to\/cdn-cgi\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjlwxc8uxop2w1c1x8p7t.png\" alt=\"\u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0648\u0634\u0647 \u0633\u0631\u0648\u0631\" loading=\"lazy\" width=\"404\" height=\"114\" title=\"\"><\/p>\n<p>\u0627\u0632 \u0627\u06cc\u062c\u0627\u062f \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062c\u0632\u0626\u06cc \u062f\u0631 \u062f\u0627\u062e\u0644 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f <code>package.json<\/code> \u0641\u0627\u06cc\u0644 \u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639 <code>nodemon<\/code>.  \u0628\u0647 \u0635\u0648\u0631\u062a \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f <code>\"type\": \"module\"<\/code> \u0628\u0631\u0627\u06cc \u0627\u062f\u0627\u0645\u0647 \u0628\u0627 ES6\u060c \u0627\u06af\u0631\u0686\u0647 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0645\u0627 \u062f\u0631 CommonJs \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f.<\/p>\n<p>\u0634\u0631\u0648\u0639 \u0628\u0627 \u0648\u0627\u0631\u062f\u0627\u062a \u0636\u0631\u0648\u0631\u06cc\u060c<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"kd\">const<\/span> <span class=\"nx\">express<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">express<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">axios<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">axios<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">rateLimit<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">express-rate-limit<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">morgan<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">morgan<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\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>\u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0628\u0631\u0646\u0627\u0645\u0647<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"kd\">const<\/span> <span class=\"nx\">app<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">express<\/span><span class=\"p\">();<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">PORT<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">3000<\/span><span class=\"p\">;<\/span>\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<blockquote>\n<p><em>\u062a\u0648\u062c\u0647: \u0627\u06af\u0631\u0686\u0647 CORS \u062f\u0631 \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0622\u0646 \u0636\u0631\u0648\u0631\u06cc \u0627\u0633\u062a.<\/em><\/p>\n<\/blockquote>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0645\u06cc\u0627\u0646 \u0627\u0641\u0632\u0627\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0648\u0631\u06af\u0627\u0646 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u0645<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"kd\">const<\/span> <span class=\"nx\">limiter<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">rateLimit<\/span><span class=\"p\">({<\/span>\n  <span class=\"na\">windowMs<\/span><span class=\"p\">:<\/span> <span class=\"mi\">15<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">60<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">1000<\/span><span class=\"p\">,<\/span> <span class=\"c1\">\/\/ 15 minutes<\/span>\n  <span class=\"na\">max<\/span><span class=\"p\">:<\/span> <span class=\"mi\">100<\/span> <span class=\"c1\">\/\/ limit each IP to 100 requests per windowMs<\/span>\n<span class=\"p\">});<\/span>\n<span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">use<\/span><span class=\"p\">(<\/span><span class=\"nx\">limiter<\/span><span class=\"p\">);<\/span>\n\n<span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">use<\/span><span class=\"p\">(<\/span><span class=\"nf\">morgan<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">combined<\/span><span class=\"dl\">'<\/span><span class=\"p\">));<\/span>\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>\u0648 \u0628\u0631\u0627\u06cc \u0645\u06cc\u0627\u0646 \u0627\u0641\u0632\u0627\u0631\u0647\u0627\u06cc \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u062e\u0637\u0627<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"kd\">const<\/span> <span class=\"nx\">handleError<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">err<\/span><span class=\"p\">,<\/span> <span class=\"nx\">req<\/span><span class=\"p\">,<\/span> <span class=\"nx\">res<\/span><span class=\"p\">,<\/span> <span class=\"nx\">next<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">error<\/span><span class=\"p\">(<\/span><span class=\"nx\">err<\/span><span class=\"p\">);<\/span>\n  <span class=\"nx\">res<\/span><span class=\"p\">.<\/span><span class=\"nf\">status<\/span><span class=\"p\">(<\/span><span class=\"mi\">500<\/span><span class=\"p\">).<\/span><span class=\"nf\">send<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">Internal Server Error<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">};<\/span>\n<span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">use<\/span><span class=\"p\">(<\/span><span class=\"nx\">handleError<\/span><span class=\"p\">);<\/span>\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 \u0627\u0632 API\u0647\u0627\u06cc \u0633\u0627\u062e\u062a\u06af\u06cc \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 JSONPlaceHolder \u0648 ReqRes \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n<ul>\n<li>\n<p>JSONPlaceHolder<\/p>\n<ul>\n<li>\n<code>\/posts<\/code>  &#8211; \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u06cc \u0627\u0632 \u067e\u0633\u062a \u0647\u0627 \u0631\u0627 \u0648\u0627\u06a9\u0634\u06cc \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\n<code>\/comments<\/code>  &#8211; \u0628\u0647 \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u06cc \u0627\u0632 \u0646\u0638\u0631\u0627\u062a \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f.<\/li>\n<li>\n<code>\/albums<\/code>  &#8211; \u0641\u0647\u0631\u0633\u062a\u06cc \u0627\u0632 \u0622\u0644\u0628\u0648\u0645 \u0647\u0627 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\n<code>\/photos<\/code>  &#8211; \u06cc\u06a9 \u0633\u0631\u06cc \u0639\u06a9\u0633 \u062a\u0647\u06cc\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\n<code>\/todos<\/code>  &#8211; \u062e\u0644\u0627\u0635\u0647 \u0627\u06cc \u0627\u0632 \u06a9\u0627\u0631\u0647\u0627 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\n<code>\/users<\/code>  &#8211; \u062b\u0628\u062a \u0646\u0627\u0645 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>RegRes<\/p>\n<ul>\n<li>\n<code>\/login<\/code>  &#8211; \u0628\u0631\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0648\u0631\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f.\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">use<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">\/api<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"k\">async <\/span><span class=\"p\">(<\/span><span class=\"nx\">req<\/span><span class=\"p\">,<\/span> <span class=\"nx\">res<\/span><span class=\"p\">,<\/span> <span class=\"nx\">next<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span> <span class=\"p\">...<\/span> <span class=\"p\">}<\/span>\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 \u062f\u0627\u062e\u0644 \u0627\u062c\u0631\u0627 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f <code>try<\/code> \u0648 <code>catch<\/code> \u0631\u0648\u0634<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"k\">try<\/span><span class=\"p\">{<\/span> <span class=\"p\">...<\/span> <span class=\"p\">}<\/span> <span class=\"k\">catch <\/span><span class=\"p\">(<\/span><span class=\"nx\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span> <span class=\"p\">...<\/span> <span class=\"p\">}<\/span>\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\u0627\u062e\u0644 <code>try<\/code> \u0628\u06cc\u0627\u06cc\u06cc\u062f \u06a9\u0627\u0631 \u0627\u0635\u0644\u06cc \u0631\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u0645<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"kd\">let<\/span> <span class=\"nx\">response<\/span><span class=\"p\">;<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">path<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">req<\/span><span class=\"p\">.<\/span><span class=\"nx\">path<\/span><span class=\"p\">;<\/span>\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<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"k\">if <\/span><span class=\"p\">(<\/span>\n    <span class=\"nx\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">startsWith<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/posts<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span> <span class=\"o\">||<\/span>\n    <span class=\"nx\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">startsWith<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/comments<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span> <span class=\"o\">||<\/span>\n    <span class=\"nx\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">startsWith<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/albums<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span> <span class=\"o\">||<\/span>\n    <span class=\"nx\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">startsWith<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/photos<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span> <span class=\"o\">||<\/span>\n    <span class=\"nx\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">startsWith<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/todos<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span> <span class=\"o\">||<\/span>\n    <span class=\"nx\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">startsWith<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/users<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c1\">\/\/ Route to JSONPlaceholder<\/span>\n    <span class=\"nx\">response<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">axios<\/span><span class=\"p\">.<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s2\">`https:\/\/jsonplaceholder.typicode.com<\/span><span class=\"p\">${<\/span><span class=\"nx\">path<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">startsWith<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/reqres-users<\/span><span class=\"dl\">\"<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c1\">\/\/ Route to ReqRes<\/span>\n    <span class=\"nx\">response<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">axios<\/span><span class=\"p\">.<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s2\">`https:\/\/reqres.in\/api<\/span><span class=\"p\">${<\/span><span class=\"nx\">path<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">startsWith<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/reqres-login<\/span><span class=\"dl\">\"<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c1\">\/\/ Handle ReqRes login<\/span>\n    <span class=\"nx\">response<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">axios<\/span><span class=\"p\">.<\/span><span class=\"nf\">post<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">https:\/\/reqres.in\/api\/login<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n      <span class=\"na\">email<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">eve.holt@reqres.in<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n      <span class=\"na\">password<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">cityslicka<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n  <span class=\"p\">});<\/span>\n<span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">res<\/span><span class=\"p\">.<\/span><span class=\"nf\">status<\/span><span class=\"p\">(<\/span><span class=\"mi\">404<\/span><span class=\"p\">).<\/span><span class=\"nf\">send<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Endpoint not found<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"nx\">res<\/span><span class=\"p\">.<\/span><span class=\"nf\">json<\/span><span class=\"p\">(<\/span><span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nx\">data<\/span><span class=\"p\">);<\/span>\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>\u0648 \u0647\u0645\u06cc\u0646 \u0627\u0633\u062a.  \u0645\u0627 \u0627\u062c\u0631\u0627\u06cc \u0627\u0648\u0644\u06cc\u0646 API Gateway \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u067e\u0627\u06cc\u0627\u0646 \u0631\u0633\u0627\u0646\u062f\u06cc\u0645.<\/p>\n<p>\u06a9\u062f \u06a9\u0644\u06cc \u0628\u0627\u06cc\u062f \u0628\u0647 \u0627\u06cc\u0646 \u0634\u06a9\u0644 \u0628\u0627\u0634\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"kd\">const<\/span> <span class=\"nx\">express<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">express<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">axios<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">axios<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">rateLimit<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">express-rate-limit<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">morgan<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">morgan<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n\n<span class=\"kd\">const<\/span> <span class=\"nx\">app<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">express<\/span><span class=\"p\">();<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">PORT<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">3000<\/span><span class=\"p\">;<\/span>\n\n\n<span class=\"kd\">const<\/span> <span class=\"nx\">limiter<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">rateLimit<\/span><span class=\"p\">({<\/span>\n  <span class=\"na\">windowMs<\/span><span class=\"p\">:<\/span> <span class=\"mi\">15<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">60<\/span> <span class=\"o\">*<\/span> <span class=\"mi\">1000<\/span><span class=\"p\">,<\/span> <span class=\"c1\">\/\/ 15 minutes<\/span>\n  <span class=\"na\">max<\/span><span class=\"p\">:<\/span> <span class=\"mi\">100<\/span><span class=\"p\">,<\/span> <span class=\"c1\">\/\/ limit each IP to 100 requests per windowMs<\/span>\n<span class=\"p\">});<\/span>\n<span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">use<\/span><span class=\"p\">(<\/span><span class=\"nx\">limiter<\/span><span class=\"p\">);<\/span>\n\n\n<span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">use<\/span><span class=\"p\">(<\/span><span class=\"nf\">morgan<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">combined<\/span><span class=\"dl\">\"<\/span><span class=\"p\">));<\/span>\n\n<span class=\"c1\">\/\/ Error Handling Middleware<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">handleError<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"nx\">err<\/span><span class=\"p\">,<\/span> <span class=\"nx\">req<\/span><span class=\"p\">,<\/span> <span class=\"nx\">res<\/span><span class=\"p\">,<\/span> <span class=\"nx\">next<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">error<\/span><span class=\"p\">(<\/span><span class=\"nx\">err<\/span><span class=\"p\">);<\/span>\n  <span class=\"nx\">res<\/span><span class=\"p\">.<\/span><span class=\"nf\">status<\/span><span class=\"p\">(<\/span><span class=\"mi\">500<\/span><span class=\"p\">).<\/span><span class=\"nf\">send<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Internal Server Error<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">};<\/span>\n<span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">use<\/span><span class=\"p\">(<\/span><span class=\"nx\">handleError<\/span><span class=\"p\">);<\/span>\n\n<span class=\"c1\">\/\/ Unified API endpoint<\/span>\n<span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">use<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/api<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"k\">async <\/span><span class=\"p\">(<\/span><span class=\"nx\">req<\/span><span class=\"p\">,<\/span> <span class=\"nx\">res<\/span><span class=\"p\">,<\/span> <span class=\"nx\">next<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">let<\/span> <span class=\"nx\">response<\/span><span class=\"p\">;<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">path<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">req<\/span><span class=\"p\">.<\/span><span class=\"nx\">path<\/span><span class=\"p\">;<\/span>\n\n    <span class=\"k\">if <\/span><span class=\"p\">(<\/span>\n      <span class=\"nx\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">startsWith<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/posts<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span> <span class=\"o\">||<\/span>\n      <span class=\"nx\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">startsWith<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/comments<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span> <span class=\"o\">||<\/span>\n      <span class=\"nx\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">startsWith<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/albums<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span> <span class=\"o\">||<\/span>\n      <span class=\"nx\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">startsWith<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/photos<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span> <span class=\"o\">||<\/span>\n      <span class=\"nx\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">startsWith<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/todos<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span> <span class=\"o\">||<\/span>\n      <span class=\"nx\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">startsWith<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/users<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n      <span class=\"c1\">\/\/ Route to JSONPlaceholder<\/span>\n      <span class=\"nx\">response<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">axios<\/span><span class=\"p\">.<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s2\">`https:\/\/jsonplaceholder.typicode.com<\/span><span class=\"p\">${<\/span><span class=\"nx\">path<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">startsWith<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/reqres-users<\/span><span class=\"dl\">\"<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\n      <span class=\"c1\">\/\/ Route to ReqRes<\/span>\n      <span class=\"nx\">response<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">axios<\/span><span class=\"p\">.<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"s2\">`https:\/\/reqres.in\/api<\/span><span class=\"p\">${<\/span><span class=\"nx\">path<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">path<\/span><span class=\"p\">.<\/span><span class=\"nf\">startsWith<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">\/reqres-login<\/span><span class=\"dl\">\"<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\n      <span class=\"c1\">\/\/ Handle ReqRes login<\/span>\n      <span class=\"nx\">response<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">axios<\/span><span class=\"p\">.<\/span><span class=\"nf\">post<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">https:\/\/reqres.in\/api\/login<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n        <span class=\"na\">email<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">eve.holt@reqres.in<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"na\">password<\/span><span class=\"p\">:<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">cityslicka<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span>\n      <span class=\"p\">});<\/span>\n    <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n      <span class=\"nx\">res<\/span><span class=\"p\">.<\/span><span class=\"nf\">status<\/span><span class=\"p\">(<\/span><span class=\"mi\">404<\/span><span class=\"p\">).<\/span><span class=\"nf\">send<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">Endpoint not found<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n      <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"nx\">res<\/span><span class=\"p\">.<\/span><span class=\"nf\">json<\/span><span class=\"p\">(<\/span><span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nx\">data<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span> <span class=\"k\">catch <\/span><span class=\"p\">(<\/span><span class=\"nx\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nf\">next<\/span><span class=\"p\">(<\/span><span class=\"nx\">error<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">});<\/span>\n\n<span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">listen<\/span><span class=\"p\">(<\/span><span class=\"nx\">PORT<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">`API Gateway running on port <\/span><span class=\"p\">${<\/span><span class=\"nx\">PORT<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">});<\/span>\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<h2><span class=\"ez-toc-section\" id=\"%D8%AA%D8%B3%D8%AA_%D9%88_%D9%86%D8%AA%D8%A7%DB%8C%D8%AC\"><\/span>\n<p>  \u062a\u0633\u062a \u0648 \u0646\u062a\u0627\u06cc\u062c<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0648\u0642\u062a \u0622\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc API \u062e\u0648\u062f \u0631\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u0645\u060c \u0645\u0646 \u0627\u0632 Insomnia \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0645\u060c \u0627\u0645\u0627 \u0634\u0645\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0647\u0631 \u06a9\u062f\u0627\u0645 \u0627\u0632 \u0627\u0646\u062a\u062e\u0627\u0628\u200c\u0647\u0627\u06cc \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f\u060c \u0645\u0637\u0645\u0626\u0646\u0627\u064b\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0627\u062f\u0627\u0645\u0647 \u062f\u0647\u06cc\u0645 \u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc \u0631\u0627 \u0628\u0647 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc API \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0628\u0628\u06cc\u0646\u06cc\u0645 \u0622\u06cc\u0627 \u0647\u0645\u0647 \u0686\u06cc\u0632 \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0627\u0646\u062a\u0638\u0627\u0631 \u0645\u06cc\u200c\u0631\u0648\u062f \u06a9\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06cc\u0627 \u062e\u06cc\u0631.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media.dev.to\/cdn-cgi\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjpxge9bl298dovy26iyd.png\" alt=\"\u06a9\u0627\u0631\u0628\u0631 \u0627\u0634\u0627\u0631\u0647 \u0645\u06cc \u06a9\u0646\u062f\" loading=\"lazy\" width=\"800\" height=\"522\" title=\"\"><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media.dev.to\/cdn-cgi\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1lcz2sqjupywzmnnqxp7.png\" alt=\"\u067e\u0633\u062a \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc\" loading=\"lazy\" width=\"800\" height=\"520\" title=\"\"><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media.dev.to\/cdn-cgi\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhfolkfnbwrvw2arpy08m.png\" alt=\"\u0647\u0645\u0647 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc\" loading=\"lazy\" width=\"800\" height=\"522\" title=\"\"><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media.dev.to\/cdn-cgi\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fndtqo61xtf5whlwhlplh.png\" alt=\"\u0633\u06cc\u0627\u0647\u0647\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc\" loading=\"lazy\" width=\"800\" height=\"171\" title=\"\"><\/p>\n<p>\u0628\u0647 \u0647\u06a9 \u06a9\u0631\u062f\u0646 \u0627\u062f\u0627\u0645\u0647 \u062f\u0647\u06cc\u062f!<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summarize this content to 400 words in Persian Lang \u062f\u0631\u0648\u062f \u0628\u0631 \u0647\u0645\u06a9\u0627\u0631 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646\u060c \u0627\u0639\u0645 \u0627\u0632 \u0628\u0627 \u062a\u062c\u0631\u0628\u0647 \u0648 \u062a\u0627\u0632\u0647 \u0648\u0627\u0631\u062f. \u0622\u06cc\u0627 \u062a\u0627 \u0628\u0647 \u062d\u0627\u0644 \u0645\u062a\u0648\u062c\u0647 \u0634\u062f\u0647 \u0627\u06cc\u062f \u06a9\u0647 \u0628\u0627 API \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u0633\u0631\u0648\u06a9\u0627\u0631 \u062f\u0627\u0631\u06cc\u062f \u06a9\u0647 \u062f\u0627\u0631\u0627\u06cc \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0645\u0646\u062c\u0631 \u0628\u0647 \u0633\u0631\u062f\u0631\u06af\u0645\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u06cc\u0646\u06a9\u0647 \u0641\u0631\u0627\u0646\u062a \u0627\u0646\u062f \u0628\u0627\u06cc\u062f \u0628\u0647 \u06a9\u062f\u0627\u0645 \u06cc\u06a9 \u0627\u0632 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":68893,"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-68892","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\/68892","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=68892"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/68892\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/68893"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=68892"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=68892"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=68892"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}