{"id":91478,"date":"2025-01-06T06:36:44","date_gmt":"2025-01-06T03:06:44","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/%d8%b3%d8%a7%d8%ae%d8%aa-apis-%d8%a8%d8%af%d9%88%d9%86-%d8%b3%d8%b1%d9%88%d8%b1-%d8%a8%d8%a7-%d8%b3%d8%b1%d9%88%d8%b1-%d8%a8%d8%af%d9%88%d9%86-%d8%b3%d8%b1%d9%88%d8%b1%d8%8c-node-js%d8%8c-typescript\/"},"modified":"2025-01-06T06:36:44","modified_gmt":"2025-01-06T03:06:44","slug":"%d8%b3%d8%a7%d8%ae%d8%aa-apis-%d8%a8%d8%af%d9%88%d9%86-%d8%b3%d8%b1%d9%88%d8%b1-%d8%a8%d8%a7-%d8%b3%d8%b1%d9%88%d8%b1-%d8%a8%d8%af%d9%88%d9%86-%d8%b3%d8%b1%d9%88%d8%b1%d8%8c-node-js%d8%8c-typescript","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/%d8%b3%d8%a7%d8%ae%d8%aa-apis-%d8%a8%d8%af%d9%88%d9%86-%d8%b3%d8%b1%d9%88%d8%b1-%d8%a8%d8%a7-%d8%b3%d8%b1%d9%88%d8%b1-%d8%a8%d8%af%d9%88%d9%86-%d8%b3%d8%b1%d9%88%d8%b1%d8%8c-node-js%d8%8c-typescript\/","title":{"rendered":"\u0633\u0627\u062e\u062a APIS \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631 \u0628\u0627 \u0633\u0631\u0648\u0631 \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631\u060c Node.js\u060c Typescript\u060c DynamoDB \u0648 Lambda."},"content":{"rendered":"<div data-article-id=\"2186688\" id=\"article-body\">\n<p>Node.js \u0628\u0647 \u067e\u0644\u062a\u0641\u0631\u0645\u06cc \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0633\u0645\u062a \u0633\u0631\u0648\u0631 \u0628\u0627 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062a\u0628\u062f\u06cc\u0644 \u0634\u062f\u0647 \u0627\u0633\u062a. \u0627\u06a9\u0648\u0633\u06cc\u0633\u062a\u0645 \u0622\u0646\u060c \u06a9\u0647 \u0628\u0627 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0627\u0633\u0627\u0633\u06cc \u0645\u0627\u0646\u0646\u062f Express \u0634\u0631\u0648\u0639 \u0645\u06cc \u0634\u0648\u062f\u060c \u0628\u0647 \u0637\u0648\u0631 \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647\u06cc \u062a\u06a9\u0627\u0645\u0644 \u06cc\u0627\u0641\u062a\u0647 \u0627\u0633\u062a \u0648 \u0686\u0627\u0631\u0686\u0648\u0628 \u0647\u0627 \u0648 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0647\u0627\u06cc \u0645\u062a\u0646\u0648\u0639\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u067e\u0627\u0631\u0627\u062f\u0627\u06cc\u0645 \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0637\u0631\u0627\u062d\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f. \u0628\u0647 \u0637\u0648\u0631 \u0633\u0646\u062a\u06cc\u060c \u0633\u0627\u062e\u062a API \u0634\u0627\u0645\u0644 \u0646\u0648\u0634\u062a\u0646 \u06a9\u062f \u0628\u0631\u0627\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0633\u0631\u0648\u0631\u0647\u0627 \u0628\u0648\u062f.<\/p>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0638\u0647\u0648\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc\u200c\u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631\u060c \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648 \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0647 \u0627\u0633\u062a \u0648 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0631\u0627 \u0642\u0627\u062f\u0631 \u0645\u06cc\u200c\u0633\u0627\u0632\u062f \u062a\u0627 \u0628\u062f\u0648\u0646 \u0646\u06af\u0631\u0627\u0646\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u062f\u06cc\u0631\u06cc\u062a \u0633\u0631\u0648\u0631\u060c \u0628\u0631 \u0645\u0646\u0637\u0642 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627 \u062a\u0645\u0631\u06a9\u0632 \u06a9\u0646\u0646\u062f. \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0628\u0647 \u062e\u0635\u0648\u0635 \u0628\u0627 \u067e\u0644\u062a\u0641\u0631\u0645 \u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f AWS \u0645\u062d\u0628\u0648\u0628\u06cc\u062a \u0641\u0648\u0642 \u0627\u0644\u0639\u0627\u062f\u0647 \u0627\u06cc \u0628\u0647 \u062f\u0633\u062a \u0622\u0648\u0631\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u0628\u0627 \u0648\u062c\u0648\u062f \u0645\u0632\u0627\u06cc\u0627\u06cc \u0622\u0646\u060c \u0645\u0628\u062a\u062f\u06cc\u0627\u0646 \u0627\u063a\u0644\u0628 \u0628\u0631\u0627\u06cc \u06cc\u0627\u0641\u062a\u0646 \u0645\u0646\u0627\u0628\u0639 \u0648\u0627\u0636\u062d \u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639 \u0633\u0627\u062e\u062a\u0646 API \u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631 \u0628\u0627 \u0686\u0627\u0644\u0634 \u0647\u0627\u06cc\u06cc \u0645\u0648\u0627\u062c\u0647 \u0645\u06cc \u0634\u0648\u0646\u062f. \u0647\u062f\u0641 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0628\u0627 \u0627\u0631\u0627\u0626\u0647 \u06cc\u06a9 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u06af\u0627\u0645 \u0628\u0647 \u06af\u0627\u0645 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc API \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631 \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u062c\u0627\u0631\u062a \u0627\u0644\u06a9\u062a\u0631\u0648\u0646\u06cc\u06a9 \u06a9\u0648\u0686\u06a9 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 AWS \u0627\u0633\u062a.<br \/>\u0627\u06cc\u0646 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0627\u0635 \u06cc\u06a9 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u06af\u0627\u0645 \u0628\u0647 \u06af\u0627\u0645 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc CRUD API \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631 \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u062f\u0631 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u062a\u062c\u0627\u0631\u062a \u0627\u0644\u06a9\u062a\u0631\u0648\u0646\u06cc\u06a9 \u06a9\u0648\u0686\u06a9 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 AWS \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n<p>\u062f\u0631 \u0632\u06cc\u0631 \u0641\u0647\u0631\u0633\u062a\u06cc \u0627\u0632 \u0641\u0646\u0627\u0648\u0631\u06cc\u200c\u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0627\u06cc\u0646 \u0648 \u0646\u062d\u0648\u0647 \u06a9\u0645\u06a9 \u0622\u0646\u0647\u0627 \u0628\u0647 \u06a9\u0644 \u0622\u0631\u0627\u06cc\u0634 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<ol>\n<li>\n<strong>Node.js<\/strong> &#8211; \u0645\u062d\u06cc\u0637 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u0631\u0627 \u0628\u0631\u0627\u06cc \u06a9\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f. \u0628\u0631\u0627\u06cc \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0633\u0645\u062a \u0633\u0631\u0648\u0631\u060c \u0633\u0628\u06a9 \u0648 \u0633\u0631\u06cc\u0639 \u0627\u0633\u062a. \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0639\u0627\u0644\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646 \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f\u060c \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0631\u0633\u06cc\u062f\u06af\u06cc \u0645\u0648\u062b\u0631 \u0628\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc HTTP \u0648 \u067e\u0631\u0633 \u0648 \u062c\u0648\u0647\u0627\u06cc DynamoDB \u0628\u0633\u06cc\u0627\u0631 \u0645\u0647\u0645 \u0627\u0633\u062a. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0647 \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627 \u0648 \u067e\u0627\u0633\u062e \u0647\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 AWS Lambda \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\n<strong>TypeScript<\/strong>&#8211; \u0627\u0628\u0631 \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u06cc \u0627\u0632 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a\u060c \u062a\u0627\u06cc\u067e \u0627\u0633\u062a\u0627\u062a\u06cc\u06a9 \u0648 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0645\u062f\u0631\u0646 \u0631\u0627 \u0628\u0647 \u067e\u0627\u06cc\u06af\u0627\u0647 \u06a9\u062f \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u06a9\u06cc\u0641\u06cc\u062a \u06a9\u062f \u0648 \u0642\u0627\u0628\u0644\u06cc\u062a \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0631\u0627 \u0628\u0647\u0628\u0648\u062f \u0645\u06cc \u0628\u062e\u0634\u062f. \u0647\u0645\u0686\u0646\u06cc\u0646 \u062e\u0637\u0627\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0646\u0648\u0639 \u0631\u0627 \u062f\u0631 \u0637\u0648\u0644 \u062a\u0648\u0633\u0639\u0647 \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0628\u0627\u06af \u0647\u0627\u06cc \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u0631\u0627 \u06a9\u0627\u0647\u0634 \u0645\u06cc \u062f\u0647\u062f. \u0647\u0645\u0686\u0646\u06cc\u0646 \u062a\u06a9\u0645\u06cc\u0644 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0648 \u062a\u0634\u062e\u06cc\u0635 \u062e\u0637\u0627 \u0631\u0627 \u0628\u0647\u062a\u0631 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f (\u0686\u06cc\u0632\u0647\u0627\u06cc \u0634\u06af\u0641\u062a \u0627\u0646\u06af\u06cc\u0632!\ud83d\ude03).<\/li>\n<li>\n<strong>AWS Lambda<\/strong> &#8211; \u0628\u0647 \u0627\u062c\u0631\u0627\u06cc \u06a9\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0633\u0631\u0648\u0631\u0647\u0627 \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u0632\u06cc\u062a \u0627\u0636\u0627\u0641\u06cc \u0631\u0627 \u06a9\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u0642\u06cc\u0627\u0633 \u0645\u06cc \u0634\u0648\u062f \u0631\u0627 \u0627\u0632 \u0628\u06cc\u0646 \u0645\u06cc \u0628\u0631\u062f. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u0642\u0631\u0648\u0646 \u0628\u0647 \u0635\u0631\u0641\u0647 \u0627\u0633\u062a \u0632\u06cc\u0631\u0627 \u0634\u0645\u0627 \u0627\u0633\u0627\u0633\u0627\u064b \u0641\u0642\u0637 \u0647\u0632\u06cc\u0646\u0647 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u0631\u0627 \u067e\u0631\u062f\u0627\u062e\u062a \u0645\u06cc \u06a9\u0646\u06cc\u062f. \u0647\u0631 \u0639\u0645\u0644\u06cc\u0627\u062a API (\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0627\u06cc\u062c\u0627\u062f \u06cc\u0627 \u0641\u0647\u0631\u0633\u062a \u06a9\u0631\u062f\u0646 \u0645\u062d\u0635\u0648\u0644\u0627\u062a) \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u062a\u0627\u0628\u0639 Lambda \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f. \u0647\u0645\u0686\u0646\u06cc\u0646 \u062f\u0627\u0631\u0627\u06cc \u06cc\u06a9\u067e\u0627\u0631\u0686\u06af\u06cc \u0631\u0648\u0627\u0646 \u0628\u0627 <em>\u062f\u0631\u0648\u0627\u0632\u0647 API AWS<\/em> \u0628\u0631\u0627\u06cc \u067e\u0627\u0633\u062e \u0628\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc HTTP<\/li>\n<li>\n<strong>\u062f\u0631\u0648\u0627\u0632\u0647 API AWS<\/strong> &#8211; \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0646\u0642\u0637\u0647 \u0648\u0631\u0648\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc HTTP \u0628\u0647 \u062a\u0648\u0627\u0628\u0639 Lambda \u0645\u0627 \u0639\u0645\u0644 \u0645\u06cc \u06a9\u0646\u062f. \u062a\u0648\u0627\u0628\u0639 Lambda \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 RESTful API \u062f\u0631 \u0645\u0639\u0631\u0636 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc \u06af\u0630\u0627\u0631\u062f. \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u0633\u0646\u062c\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u060c \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062f\u0646 \u0646\u0631\u062e\u060c \u0648 \u0645\u062c\u0648\u0632 \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f. \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc HTTP (\u0645\u062b\u0644\u0627\u064b POST \/ \u0645\u062d\u0635\u0648\u0644\u0627\u062a) \u0631\u0627 \u0628\u0647 \u062a\u0627\u0628\u0639 Lambda \u0645\u0646\u0627\u0633\u0628 \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\n<strong>AWS DynamoDB<\/strong> &#8211; \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 (\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062d\u0635\u0648\u0644) \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u062f. \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 NoSQL \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0627\u06cc\u06cc \u0648 \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631\u06cc \u0628\u0627\u0644\u0627 \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a. \u0647\u0645\u0686\u0646\u06cc\u0646\u060c \u0627\u06cc\u0646 \u0645\u062f\u0644 \u00ab\u067e\u0631\u062f\u0627\u062e\u062a \u0628\u0647 \u0627\u0632\u0627\u06cc \u0647\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647\u00bb \u0628\u0627 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631 \u0647\u0645\u0627\u0647\u0646\u06af \u0627\u0633\u062a. \u0647\u0631 \u0645\u062d\u0635\u0648\u0644 \u062f\u0627\u0631\u0627\u06cc \u06cc\u06a9 \u06a9\u0644\u06cc\u062f \u067e\u0627\u0631\u062a\u06cc\u0634\u0646 (PK) \u0628\u0631\u0627\u06cc \u062c\u0633\u062a\u062c\u0648\u06cc \u06a9\u0627\u0631\u0622\u0645\u062f \u0648 \u06cc\u06a9 \u06a9\u0644\u06cc\u062f \u0645\u0631\u062a\u0628 \u0633\u0627\u0632\u06cc (SK) \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a\u0627\u0631 \u0627\u0636\u0627\u0641\u06cc \u0627\u0633\u062a.<\/li>\n<li>\n<strong>\u0686\u0627\u0631\u0686\u0648\u0628 \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631<\/strong> &#8211; \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631 \u0631\u0627 \u0633\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f. \u0639\u0645\u062f\u062a\u0627\u064b \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc\u200c\u0647\u0627\u06cc \u062e\u0627\u0635 AWS \u0631\u0627 \u0627\u0646\u062a\u0632\u0627\u0639 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0647\u0645\u0686\u0646\u06cc\u0646 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 YAML \u0628\u0631\u0627\u06cc \u062a\u0639\u0631\u06cc\u0641 \u0645\u0646\u0627\u0628\u0639\u060c \u062a\u0648\u0627\u0628\u0639 \u0648 \u067e\u0644\u0627\u06af\u06cc\u0646 \u0647\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\n<strong>AWS SDK<\/strong> &#8211; \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u06cc\u0632\u06cc \u0634\u062f\u0647 \u0628\u0627 \u0633\u0631\u0648\u06cc\u0633 \u0647\u0627\u06cc AWS \u062a\u0639\u0627\u0645\u0644 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f. \u0627\u06cc\u0646 API \u0628\u0631\u0627\u06cc DynamoDB\u060c Lambda\u060c S3 \u0648 \u0633\u0627\u06cc\u0631 \u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc AWS \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0648 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0627 AWS \u0631\u0627 \u0633\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\n<strong>\u067e\u0633\u062a\u0686\u06cc<\/strong> &#8211; \u0627\u0628\u0632\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc API. \u0639\u0645\u0644\u06a9\u0631\u062f API \u0631\u0627 \u062f\u0631 \u0637\u0648\u0644 \u062a\u0648\u0633\u0639\u0647 \u0648 \u067e\u0633 \u0627\u0632 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u062a\u0623\u06cc\u06cc\u062f \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0628\u0627 \u0627\u0631\u0633\u0627\u0644 POST\u060c GET \u06cc\u0627 \u0633\u0627\u06cc\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc HTTP \u0628\u0647 \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0648 \u0628\u0631\u0631\u0633\u06cc \u067e\u0627\u0633\u062e \u0647\u0627 \u0628\u0647 \u062f\u0633\u062a \u0645\u06cc \u0622\u06cc\u062f.<\/li>\n<\/ol>\n<p>\u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0631\u062f \u06a9\u0647 \u0634\u0645\u0627 \u06cc\u06a9 \u062d\u0633\u0627\u0628 AWS \u0628\u0627 \u062a\u0631\u062c\u06cc\u062d\u0627\u064b \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 IAM \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0635\u0644\u06cc \u0646\u0628\u0627\u0634\u062f (\u0628\u0631\u0627\u06cc \u067e\u06cc\u0631\u0648\u06cc \u0627\u0632 \u0631\u0648\u06cc\u06a9\u0631\u062f \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0627\u0645\u062a\u06cc\u0627\u0632 \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631\/\u0645\u0646\u0628\u0639 AWS). \u0647\u0645\u0686\u0646\u06cc\u0646 \u0644\u0627\u0632\u0645 \u0627\u0633\u062a \u062d\u0633\u0627\u0628 \u062e\u0648\u062f \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 AWS-CLI \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u0631\u0627 \u0646\u0645\u06cc \u062a\u0648\u0627\u0646 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u067e\u0648\u0634\u0634 \u062f\u0627\u062f\u060c \u0627\u0645\u0627 \u0645\u0646\u0627\u0628\u0639 \u0634\u06af\u0641\u062a \u0627\u0646\u06af\u06cc\u0632\u06cc \u062f\u0631 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u0628\u0631\u0627\u06cc \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f. \u0627\u0645\u06cc\u062f\u0648\u0627\u0631\u0645 \u0628\u062a\u0648\u0627\u0646\u0645 \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0631\u0627 \u062f\u0631 \u0645\u0642\u0627\u0644\u0647 \u0628\u0639\u062f\u06cc \u0646\u06cc\u0632 \u067e\u0648\u0634\u0634 \u062f\u0647\u0645.<\/p>\n<p>\u0628\u062f\u0648\u0646 \u0645\u0642\u062f\u0645\u0647\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u062f\u0631 \ud83d\ude80 \u0634\u06cc\u0631\u062c\u0647 \u0628\u0632\u0646\u06cc\u0645<\/p>\n<p>1) <strong>\u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627<\/strong><\/p>\n<p>\u0642\u0628\u0644 \u0627\u0632 \u0634\u0631\u0648\u0639 \u06a9\u062f\u0646\u0648\u06cc\u0633\u06cc\u060c \u0628\u0633\u06cc\u0627\u0631 \u0645\u0647\u0645 \u0627\u0633\u062a \u06a9\u0647 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645:<\/p>\n<ul>\n<li>\u0645\u0627 \u0622\u062e\u0631\u06cc\u0646 \u0646\u0633\u062e\u0647 \u0646\u0635\u0628 \u0634\u062f\u0647 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 Node.js \u0631\u0627 \u062f\u0627\u0631\u06cc\u0645\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0622\u0646 \u0631\u0627 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u062f\n<\/li>\n<li>\u0645\u0627 \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0628\u0627\u0644\u0627 \u0630\u06a9\u0631 \u0634\u062f \u06cc\u06a9 \u062d\u0633\u0627\u0628 AWS \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0627\u06cc\u0646\u062c\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f\n<\/li>\n<li>\u0645\u0627 \u0647\u0645 \u0628\u0627\u06cc\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u0645 <em>\u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631<\/em> \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0628\u0647 \u0635\u0648\u0631\u062a \u062c\u0647\u0627\u0646\u06cc \u0646\u0635\u0628 \u0634\u062f\u0647 \u0627\u0633\u062a (\u062f\u0631 \u0628\u0631\u062e\u06cc \u0645\u0648\u0627\u0631\u062f \u0628\u0627\u06cc\u062f sudo \u06cc\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u062f\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f (\u0628\u0631\u0627\u06cc \u0648\u06cc\u0646\u062f\u0648\u0632) \u0632\u06cc\u0631\u0627 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u0647 \u0645\u062c\u0648\u0632\u0647\u0627\u06cc root \u0646\u06cc\u0627\u0632 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f\n<\/li>\n<\/ul>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>npm install -g serverless\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<ul>\n<li>\u0633\u067e\u0633 \u0628\u0627\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f <strong>AWS CLI<\/strong> \u0627\u0628\u062a\u062f\u0627 \u0622\u0646 \u0631\u0627 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0627 \u062c\u0632\u0626\u06cc\u0627\u062a \u062f\u0633\u062a\u0631\u0633\u06cc AWS \u062e\u0648\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f:\n<\/li>\n<\/ul>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>aws configure\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<ul>\n<li>\u0633\u067e\u0633 \u0628\u0627\u06cc\u062f \u06a9\u0644\u06cc\u062f \u062f\u0633\u062a\u0631\u0633\u06cc AWS\u060c \u06a9\u0644\u06cc\u062f \u0645\u062e\u0641\u06cc\u060c \u0645\u0646\u0637\u0642\u0647 \u0648 \u0641\u0631\u0645\u062a \u062e\u0631\u0648\u062c\u06cc \u067e\u06cc\u0634 \u0641\u0631\u0636 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u0645.<\/li>\n<\/ul>\n<p>2)  <strong>\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u0698\u0647<\/strong><\/p>\n<ul>\n<li>\u0628\u0627 \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0646 \u0627\u06cc\u0646 \u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u0627\u0633\u0627\u0633\u06cc\u060c \u067e\u0633 \u0627\u0632 \u0622\u0646 \u0628\u0627\u06cc\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631\u060c \u0627\u0644\u06af\u0648\u06cc \u067e\u0631\u0648\u0698\u0647 \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631 \u062c\u062f\u06cc\u062f \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645.\n<\/li>\n<\/ul>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>serverless \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\u0646 \u0634\u062e\u0635\u0627\u064b \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0645 \u0627\u0644\u06af\u0648\u0647\u0627\u06cc Node.js\u060c Express \u0648 DynamoDB \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u06a9\u062f boilerplate \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0628\u0631\u0627\u06cc \u0628\u0648\u062a \u0627\u0633\u062a\u0631\u067e \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u06a9\u0627\u0647\u0634 \u062f\u0647\u06cc\u062f\u060c \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u062f\u0631 \u0632\u06cc\u0631 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a.<br \/><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgp13c5a5lwped8o0jxxq.png\" alt=\"\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631\" loading=\"lazy\" width=\"800\" height=\"380\" title=\"\"><\/p>\n<p>\u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647 \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u0631\u0627 \u06af\u0630\u0627\u0634\u062a\u0645 <em>mini-commerce-api<\/em> (\u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0647\u0631 \u0646\u0627\u0645 \u062f\u0644\u062e\u0648\u0627\u0647 \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f). \u067e\u0648\u0634\u0647 \u0627\u06cc \u0628\u0647 \u0647\u0645\u06cc\u0646 \u0646\u0627\u0645 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0628\u0647 \u0622\u0646 \u0628\u0631\u0648\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>cd mini-ecommerce-api\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>\u0633\u067e\u0633 \u0628\u0647 \u0646\u0635\u0628 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc\u200c\u0647\u0627 \u0648 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc\u200c\u0647\u0627\u06cc \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u0647 \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0645\u0648\u0627\u0631\u062f\u06cc \u06a9\u0647 \u0647\u0646\u06af\u0627\u0645 \u0627\u06cc\u062c\u0627\u062f \u067e\u0631\u0648\u0698\u0647 \u0646\u0635\u0628 \u0634\u062f\u0647\u200c\u0627\u0646\u062f\u060c \u0628\u0647 \u0634\u0631\u062d \u0632\u06cc\u0631 \u0627\u062f\u0627\u0645\u0647 \u0645\u06cc\u200c\u062f\u0647\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>npm install ts-node @types\/node aws-sdk\nnpm install --save-dev typescript @types\/aws-lambda\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>\u0627\u06cc\u0646 \u062e\u0644\u0627\u0635\u0647 \u0627\u06cc \u0627\u0632 \u0628\u0633\u062a\u0647 \u0647\u0627\u06cc \u0627\u0635\u0644\u06cc \u0646\u0635\u0628 \u0634\u062f\u0647 \u0627\u0633\u062a<\/p>\n<ul>\n<li>\n<em>\u062a\u0627\u06cc\u067e \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a<\/em>: \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 TypeScript.<\/li>\n<li>\n<em>ts-node<\/em>: TypeScript \u0631\u0627 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u062f\u0648\u0646 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u06a9\u0631\u062f\u0646 \u062f\u0631 JS \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\n<em>@types\/node<\/em>: \u062a\u0639\u0627\u0631\u06cc\u0641 Node.js \u0631\u0627 \u062a\u0627\u06cc\u067e \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\n<em>aws-sdk<\/em>: \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 AWS \u0628\u0631\u0627\u06cc \u062a\u0639\u0627\u0645\u0644 \u0628\u0627 \u0633\u0631\u0648\u06cc\u0633 \u0647\u0627\u06cc AWS \u0645\u0627\u0646\u0646\u062f DynamoDB.<\/li>\n<li>\n<em>@types\/aws-lambda<\/em>: \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u0646\u0648\u0639 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0646\u0648\u0634\u062a\u0646 \u062a\u0648\u0627\u0628\u0639 AWS Lambda \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f<\/li>\n<\/ul>\n<p>3) <strong>\u062a\u0627\u06cc\u067e \u0627\u0633\u06a9\u0631\u06cc\u067e \u0631\u0627 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>npx tsc --init\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\u0646 \u0628\u0627\u0639\u062b \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 <em>tsconfig.json<\/em> \u06a9\u0647 \u0633\u067e\u0633 \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0645\u06cc \u06a9\u0646\u06cc\u0645<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>{\n  \"compilerOptions\": {\n    \"target\": \"ES6\",\n    \"module\": \"CommonJS\",\n    \"outDir\": \"dist\",\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true\n  },\n  \"include\": [\"src\/**\/*\"],\n  \"exclude\": [\"node_modules\"]\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>4) <strong>\u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0631\u0648\u0698\u0647<\/strong><\/p>\n<p>\u0633\u067e\u0633 \u0627\u0642\u062f\u0627\u0645 \u0628\u0647 \u0627\u06cc\u062c\u0627\u062f \u0641\u0627\u06cc\u0644 \u0647\u0627 \u0648 \u067e\u0648\u0634\u0647 \u0647\u0627 \u062f\u0631 \u0633\u0627\u062e\u062a\u0627\u0631 \u0632\u06cc\u0631 \u0645\u06cc \u06a9\u0646\u06cc\u0645<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>mini-ecommerce-api\/\n\u251c\u2500\u2500 src\/\n\u2502   \u251c\u2500\u2500 handlers\/\n\u2502   \u2502   \u251c\u2500\u2500 createProduct.ts\n\u2502   \u2502   \u251c\u2500\u2500 listProducts.ts\n        \u251c\u2500\u2500 getProductId.ts\n        \u251c\u2500\u2500 updateProduct.ts\n        \u251c\u2500\u2500 deleteProduct.ts\n\u2502   \u251c\u2500\u2500 utils\/\n\u2502   \u2502   \u251c\u2500\u2500 dynamoClient.ts\n\u251c\u2500\u2500 .gitignore\n\u251c\u2500\u2500 serverless.yml\n\u251c\u2500\u2500 tsconfig.json\n\u251c\u2500\u2500 package.json\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>5) <strong>\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc Serverless.yml<\/strong> <\/p>\n<p>\u0633\u067e\u0633 \u0641\u0627\u06cc\u0644 serverless.yml \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u062f\u0631 \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u0628\u0627 \u0641\u0627\u06cc\u0644 \u0632\u06cc\u0631 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u062a\u0639\u0631\u06cc\u0641 \u0645\u0646\u0627\u0633\u0628\u06cc \u0627\u0632 \u0622\u0646\u0686\u0647 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u0645 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0645\u062b\u0627\u0644 \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0628\u0627 \u0646\u06cc\u0627\u0632(\u0647\u0627\u06cc) \u067e\u0631\u0648\u0698\u0647 \u062e\u0627\u0635 \u0634\u0645\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0631\u062f<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>#app metadata\norg: geocoderserverless \napp: my-serverless-app\nservice: mini-ecommerce-api-serverless\n\nframeworkVersion: \"4\"\n\nprovider:\n  name: aws\n  runtime: nodejs18.x\n  region: ca-central-1 ## Change ca-central to your  region of choice\n  environment: ## This binds your env variable to the dynamoDB product table\n    PRODUCTS_TABLE:\n      Ref: ProductsTable  \n## Lambda permissions.\n  iamRoleStatements: \n    - Effect: Allow\n      Action:\n        - dynamodb:PutItem\n        - dynamodb:Scan\n        - dynamodb:GetItem\n        - dynamodb:UpdateItem\n        - dynamodb:DeleteItem\n      Resource: arn:aws:dynamodb:ca-central-1:${aws:accountId}:table\/ProductsTable ## Change the ca-central to the region of choice\n## handler build configuration\n\n## This causes each lambda function to be built and packaged individually, this was done to save space\npackage: \n  individually: true \n  exclude:\n    - node_modules\/**\n    - .serverless\/**\n    - .git\/**\n    - test\/**\n    - README.md\n    - package-lock.json\n\n## Handler functions\nfunctions:\n  createProduct:\n    handler: src\/handlers\/createProduct.createProduct ## The handler to create products\n    events:\n      - http:\n          path: products\n          method: post\n\n  listProducts:\n    handler: src\/handlers\/listProducts.listProducts\n    events:\n      - http:\n          path: products\n          method: get\n\n  getProductById:\n    handler: src\/handlers\/getProductById.getProductById\n    events:\n      - http:\n          path: products\/{id}\n          method: get\n\n  updateProduct:\n    handler: src\/handlers\/updateProduct.updateProduct\n    events:\n      - http:\n          path: products\/{id}\n          method: put\n\n  deleteProduct:\n    handler: src\/handlers\/deleteProduct.deleteProduct\n    events:\n      - http:\n          path: products\/{id}\n          method: delete\n\n#DynamoDB table configuration\nresources:\n  Resources:\n    ProductsTable:\n      Type: AWS::DynamoDB::Table\n      Properties:\n        TableName: ProductsTable\n        AttributeDefinitions:\n          - AttributeName: PK\n            AttributeType: S\n          - AttributeName: SK\n            AttributeType: S\n        KeySchema:\n          - AttributeName: PK\n            KeyType: HASH\n          - AttributeName: SK\n            KeyType: RANGE\n        BillingMode: PAY_PER_REQUEST\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>6)  <strong>\u06a9\u062f<\/strong><\/p>\n<p>\u0628\u0627 \u0645\u0631\u062a\u0628 \u0634\u062f\u0646 \u0642\u0633\u0645\u062a \u0627\u0635\u0644\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0647 \u0646\u0648\u0634\u062a\u0646 \u06a9\u062f \u0627\u062f\u0627\u0645\u0647 \u062f\u0647\u06cc\u0645. <\/p>\n<p>\u0627\u0644\u0641) <em>\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc DynamoDBClient (src\/utils\/DynamoDBClient.ts)<\/em><\/p>\n<p>\u0627\u0648\u0644 \u0627\u0632 \u0647\u0645\u0647\u060c \u0645\u0627 \u0628\u0647 \u06a9\u062f\u06cc \u0628\u0631\u0627\u06cc \u0628\u0631\u0642\u0631\u0627\u0631\u06cc \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0628\u0627 DynamoDB \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u0645\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0627\u0628\u0632\u0627\u0631 dynamoDBClient \u0645\u06cc \u0646\u0648\u06cc\u0633\u06cc\u0645 \u06a9\u0647 \u0628\u0647 \u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f \u0645\u0646\u0637\u0642 \u062a\u0639\u0627\u0645\u0644 \u0628\u0627 DynamoDB \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0627\u0646\u062a\u0632\u0627\u0639 \u06a9\u0646\u06cc\u0645:<\/p>\n<p>src\/utils\/DynamoDBClient.ts<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>import { DynamoDB } from \"aws-sdk\";\n\nconst dynamoDB = new DynamoDB.DocumentClient()\n\nexport default dynamoDB\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>\u0628) <em>\u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0631\u0627\u0628\u0637 \u0645\u062d\u0635\u0648\u0644 (src\/utils\/DynamoDBClient.ts)<\/em><\/p>\n<p>\u0628\u0631\u0627\u06cc \u062a\u0639\u0627\u0631\u06cc\u0641 \u0645\u0646\u0627\u0633\u0628 \u0646\u0648\u0639\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u06cc\u06a9 \u0631\u0627\u0628\u0637 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0645\u0634\u062e\u0635 \u06a9\u0646\u062f \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u0628\u0647 \u0686\u0647 \u0686\u06cc\u0632\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f\u060c \u0627\u06cc\u0646 \u0628\u0647 \u0627\u0631\u0627\u0626\u0647 \u0627\u06cc\u0645\u0646\u06cc \u0646\u0648\u0639 \u0647\u0646\u06af\u0627\u0645 \u0646\u0648\u0634\u062a\u0646 \u062a\u0648\u0627\u0628\u0639 Lambda \u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>export interface Product {\n  name: string;\n  price: number;\n  description?: string  \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) \u0628\u0627 \u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u062a\u0631\u0644\u200c\u06a9\u0646\u0646\u062f\u0647\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062a\u0648\u0627\u0628\u0639 \u0644\u0627\u0645\u0628\u062f\u0627 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a CRUD \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f\u060c \u0627\u062f\u0627\u0645\u0647 \u062f\u0647\u06cc\u0645. \u062a\u0639\u0627\u0631\u06cc\u0641 \u06af\u0631\u062f\u0627\u0646\u0646\u062f\u0647 \u062f\u0631 \u0632\u06cc\u0631 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u0645\u0646 <em>\u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u0645\u062d\u0635\u0648\u0644 (src\/handlers\/createProduct.ts)<\/em><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>import { APIGatewayProxyHandler } from 'aws-lambda';\nimport dynamoDB from '..\/utils\/DynamoDbClient';\nimport { Product } from '..\/interfaces\/Product';\nimport { DynamoDB } from 'aws-sdk';\n\n\/\/ Handler definition\nexport const createProduct: APIGatewayProxyHandler = async (event) =&gt; {\n  const body: Partial<product> = JSON.parse(event.body || '{}');\n  const { name, price, description } = body;\n  if (!name || !price) {\n    return {\n      statusCode: 400,\n      body: JSON.stringify({ error: 'Name and price are required!' }),\n    };\n  }\n\n\/\/ Definition of parameters including input \n  const params: DynamoDB.DocumentClient.PutItemInput = {\n    TableName: process.env.PRODUCTS_TABLE!,\n    Item: {\n      PK: `PRODUCT#${name}`,\n      SK: `PRODUCT`,\n      name,\n      price,\n      description,\n    } as Product,\n  };\n\n\n\n  try {\n    await dynamoDB.put(params).promise();\n    return {\n      statusCode: 201,\n      body: JSON.stringify({\n        message: 'Product created successfully',\n        data: params.Item,\n      }),\n    };\n  } catch (error) {\n    console.error('Error creating product:', error);\n    return {\n      statusCode: 500,\n      body: JSON.stringify({\n        error: 'Could not create product',\n      }),\n    };\n  }\n};\n<\/product><\/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>ii <em>\u0641\u0647\u0631\u0633\u062a \u06a9\u0646\u0646\u062f\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a (src\/handlers\/listProducts.ts)<\/em><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>import { APIGatewayProxyHandler } from 'aws-lambda'\nimport dynamoDB from '..\/utils\/DynamoDbClient'\nimport {DynamoDB} from 'aws-sdk'\nimport { Product } from '..\/interfaces\/Product'\nexport const listProducts: APIGatewayProxyHandler = async(event)=&gt; {\n\n const params: DynamoDB.DocumentClient.ScanInput = {\n\n      TableName: process.env.PRODUCTS_TABLE!,\n    }\n\n    try {\n     const result: DynamoDB.DocumentClient.ScanOutput = await dynamoDB.scan(params).promise()\n     const products: Product[] = result.Items as Product[] || []\n     return {\n      statusCode: 200,\n      body: JSON.stringify({\n        success: \"true\",\n        data: products\n      })\n     }\n    } catch (error) {\n      console.error('Error Fetching products:',error)\n      return {\n        statusCode: 500,\n        body: JSON.stringify({\n          error: 'Could not fetch products'\n        })\n      }\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>III. <em>\u0648\u0627\u06a9\u0634\u06cc \u0645\u062d\u0635\u0648\u0644\u0627\u062a \u0628\u0627 \u0634\u0646\u0627\u0633\u0647 (PK) Handler (src\/handlers\/getProductById.ts)<\/em> <\/p>\n<ul>\n<li>\u0628\u0631\u0627\u06cc \u0633\u0647\u0648\u0644\u062a \u062f\u0631\u06a9 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0646\u0627\u0645 \u0645\u062d\u0635\u0648\u0644 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06a9\u0644\u06cc\u062f \u0627\u0635\u0644\u06cc\/\u067e\u0627\u0631\u062a\u06cc\u0634\u0646 (PK) \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u0645 \u0648 \u0627\u062c\u0631\u0627\u06cc \u0622\u0646 \u062f\u0631 \u0632\u06cc\u0631 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a.\n<\/li>\n<\/ul>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>import { APIGatewayProxyHandler } from \"aws-lambda\";\nimport { DynamoDB } from \"aws-sdk\";\nimport dynamoDB from \"..\/utils\/DynamoDbClient\";\nimport { Product } from \"..\/interfaces\/Product\";\n\nexport const getProductById: APIGatewayProxyHandler = async(event)=&gt;{\n\nconst productId = event.pathParameters?.id\n\n  if(!productId) {\n    return {\n      statusCode: 400,\n      body: JSON.stringify({\n        error: \"Product ID is required\"\n      })\n    }\n  }\n\n  const params: DynamoDB.DocumentClient.GetItemInput = {\n    TableName: process.env.PRODUCTS_TABLE!,\n    Key: {\n      PK: `PRODUCT#${productId}`,\n      SK: \"PRODUCT\"\n    }\n  }\n\n  try {\n\n    const result: DynamoDB.DocumentClient.GetItemOutput = await dynamoDB.get(params).promise()\n    const product: Product | undefined = result.Item as Product\n\n    if(!product) {\n      return {\n        statusCode: 404,\n        body: JSON.stringify({\n          error: \"Product not found!\"\n        })\n      }\n    }\n\n    return {\n      statusCode: 200,\n      body: JSON.stringify({\n        success: true,\n        data: product\n      })\n    }\n\n  } catch (error) {\n    console.error('Error fetching product:', error)\n    return {\n      statusCode: 500,\n      body: JSON.stringify({error: `Could not fetch product with id ${productId}`})\n    }\n  }\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>IV <em>\u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u062a\u0648\u0633\u0637 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u0634\u0646\u0627\u0633\u0647 (src\/handlers\/updateProduct.ts)<\/em><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>import { APIGatewayProxyHandler } from \"aws-lambda\";\nimport { Product } from \"..\/interfaces\/Product\";\nimport { DynamoDB } from \"aws-sdk\";\nimport dynamoDB from \"..\/utils\/DynamoDbClient\";\n\nexport const updateProduct: APIGatewayProxyHandler = async (event)=&gt;{\n  const productId = event.pathParameters?.id\n  const body: Partial<product> = JSON.parse(event.body || \"{}\")\n\n  const {name, price, description} = body\n\n  if(!productId || (!name &amp;&amp; !price &amp;&amp; !description)) {\n    return {\n      statusCode: 400,\n      body: JSON.stringify({\n        error: 'PRODUCT ID and least one field should be updated'\n      })\n    }\n  }\n\n  \/\/ set up to store edited values\n  const updateExpressions: string[] = []\n  const expressionAttributeNames: Record<string> = {}\n  const expressionAttributeValues: Record<string> = {}\n\n  if(name) {\n    updateExpressions.push(\"#name = :name\")\n    expressionAttributeNames[\"#name\"] = \"name\"\n    expressionAttributeValues[\":name\"] = name\n\n  }\n  if(description) {\n    updateExpressions.push(\"#description = :description\")\n    expressionAttributeNames[\"#description\"] = \"description\"\n    expressionAttributeValues[\":description\"] = description\n\n  }\n  if(price) {\n    updateExpressions.push(\"#price = :price\")\n    expressionAttributeNames[\"#price\"] = \"price\"\n    expressionAttributeValues[\":price\"] = price\n\n  }\n\n  \/\/ set up params\n  const params: DynamoDB.DocumentClient.UpdateItemInput = {\n    TableName: process.env.PRODUCTS_TABLE!,\n    Key: { PK: `PRODUCT#${productId}`, SK: \"PRODUCT\" },\n    UpdateExpression: `SET ${updateExpressions.join(\", \")}`,\n    ExpressionAttributeNames: expressionAttributeNames,\n    ExpressionAttributeValues: expressionAttributeValues,\n    ReturnValues: \"ALL_NEW\"\n  }\n\n\n  try {\n    const result: DynamoDB.DocumentClient.UpdateItemOutput = await dynamoDB.update(params).promise()\n    const updatedProduct: Product = result.Attributes as Product\n\n    return {\n      statusCode: 200,\n      body: JSON.stringify({\n        success: true,\n        data: updatedProduct\n      })\n    }\n  } catch (error) {\n    console.error(\"Error updating product:\", error);\n    return {\n      statusCode: 500,\n      body: JSON.stringify({ error: \"Could not update product.\" }),\n    };\n  }\n\n}\n\n<\/string><\/string><\/product><\/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>v <em>\u062d\u0630\u0641 \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u062a\u0648\u0633\u0637 \u0634\u0646\u0627\u0633\u0647 \u0634\u0646\u0627\u0633\u0647 (src\/handlers\/updateProduct.ts)<\/em><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>import { APIGatewayProxyHandler } from \"aws-lambda\";\nimport { DynamoDB } from \"aws-sdk\";\nimport dynamoDB from \"..\/utils\/DynamoDbClient\";\n\nexport const deleteProduct: APIGatewayProxyHandler = async (event)=&gt; {\n  const productId = event.pathParameters?.id\n\n  if(!productId) {\n    return {\n      statusCode: 400,\n      body: JSON.stringify({\n        success: false,\n        error: 'Product ID is required'\n      })\n    }\n  }\n\n  const params: DynamoDB.DocumentClient.DeleteItemInput = {\n    TableName: process.env.PRODUCTS_TABLE!,\n    Key: {\n      PK: `PRODUCT#${productId}`,\n      SK: \"PRODUCT\",\n    },\n    ConditionExpression: \"attribute_exists(PK)\"\n  }\n\n  try {\n    await dynamoDB.delete(params).promise()\n    return {\n      statusCode: 200,\n      body: JSON.stringify({\n        success: true,\n        message: \"Product deleted successfully\"\n      })\n    }\n  } catch (error: any) {\n    console.error('Error deleting product:', error)\n\n    if (error.code === \"ConditionalCheckFailedException\") {\n      return {\n        statusCode: 404,\n        body: JSON.stringify({\n          success: false,\n          error: \"Product not found.\",\n        }),\n      };\n    }\n\n    return {\n      statusCode: 500,\n      body: JSON.stringify({\n        success: false,\n        error: \"Could not delete product.\",\n      }),\n    };\n  }\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>7) <strong>\u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u06a9\u062f<\/strong><\/p>\n<p>\u0633\u067e\u0633 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u062a\u0639\u0627\u0631\u06cc\u0641 serverless.yml \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631\u060c \u0633\u0631\u0648\u06cc\u0633 \u0631\u0627 \u0628\u0627 \u06a9\u062f \u062a\u06a9\u0645\u06cc\u0644 \u0634\u062f\u0647 \u062f\u0631 AWS \u0645\u0633\u062a\u0642\u0631 \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>serverless deploy\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\u0645\u06a9\u0646 \u0627\u0633\u062a \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0622\u0645\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f <em>\u0633\u0648\u062f\u0648<\/em> (\u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0644\u06cc\u0646\u0648\u06a9\u0633) \u06cc\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc \u0633\u0631\u067e\u0631\u0633\u062a (\u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0648\u06cc\u0646\u062f\u0648\u0632) \u0631\u0627 \u0628\u0647 \u062f\u0644\u06cc\u0644 \u0645\u0634\u06a9\u0644\u0627\u062a \u0645\u062c\u0648\u0632 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u062a\u0648\u0627\u0628\u0639\/\u0647\u0646\u062f\u0644\u0631\u0647\u0627\u06cc \u0644\u0627\u0645\u0628\u062f\u0627 \u0645\u0642\u06cc\u0627\u0633\u200c\u067e\u0630\u06cc\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627 \u0648 \u067e\u0627\u0633\u062e\u200c\u0647\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u06cc\u06a9 \u062c\u062f\u0648\u0644 Product DynamoDB \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u06cc\u06a9 \u0645\u0639\u0645\u0627\u0631\u06cc \u0628\u0647\u06cc\u0646\u0647\u200c\u0634\u062f\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 CloudFormation \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/p>\n<p>\u062f\u0631 \u0635\u0648\u0631\u062a \u0645\u0648\u0641\u0642\u06cc\u062a \u0622\u0645\u06cc\u0632 \u0628\u0648\u062f\u0646\u060c \u0628\u0627\u06cc\u062f \u062e\u0631\u0648\u062c\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u0645\u060c \u0628\u0647 \u0637\u0648\u0631\u06cc \u06a9\u0647 api-id \u0648 \u0645\u0646\u0637\u0642\u0647\u060c api-id \u0634\u062e\u0635\u06cc \u0648 \u0645\u0646\u0637\u0642\u0647 AWS \u0634\u0645\u0627 \u062f\u0631 \u0642\u0627\u0644\u0628 \u0645\u062b\u0627\u0644\u06cc \u06a9\u0647 \u062f\u0631 \u0632\u06cc\u0631 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>endpoints:\n  POST - https:\/\/<api-id>.execute-api.<region>.amazonaws.com\/dev\/products\n  GET - https:\/\/<api-id>.execute-api.<region>.amazonaws.com\/dev\/products\n  GET - https:\/\/<api-id>.execute-api.<region>.amazonaws.com\/dev\/products\/{id}\n  PUT - https:\/\/<api-id>.execute-api.<region>.amazonaws.com\/dev\/products\/{id}\n  DELETE - https:\/\/<api-id>.execute-api.<region>.amazonaws.com\/dev\/products\/{id}\n<\/region><\/api-id><\/region><\/api-id><\/region><\/api-id><\/region><\/api-id><\/region><\/api-id><\/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>\u0633\u067e\u0633 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u0646\u060c \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a\u200c\u0634\u062f\u0647 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06cc\u06a9 \u0645\u0634\u062a\u0631\u06cc frontend \u0631\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u0645 <strong>\u067e\u0633\u062a\u0686\u06cc<\/strong>\u060c \u062f\u0631 \u0632\u06cc\u0631 \u062a\u0635\u0627\u0648\u06cc\u0631\u06cc \u0627\u0632 \u0646\u062a\u0627\u06cc\u062c \u0631\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u062f<\/p>\n<p><strong>\u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644<\/strong><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwjpsiei7syvqtlarvmcv.png\" alt=\"\u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f\" loading=\"lazy\" width=\"800\" height=\"500\" title=\"\"><\/p>\n<p><strong>\u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u062a\u0645\u0627\u0645 \u0645\u062d\u0635\u0648\u0644\u0627\u062a<\/strong><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgt9e8m3wsydqlraqx22w.png\" alt=\"\u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u062a\u0645\u0627\u0645 \u0645\u062d\u0635\u0648\u0644\u0627\u062a\" loading=\"lazy\" width=\"800\" height=\"500\" title=\"\"><\/p>\n<p><strong>\u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u0648\u0627\u062d\u062f \u0628\u0627 \u0634\u0646\u0627\u0633\u0647<\/strong><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftsqce3yhv0t9oare0ssk.png\" alt=\"\u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u0648\u0627\u062d\u062f \u0628\u0627 \u0634\u0646\u0627\u0633\u0647\" loading=\"lazy\" width=\"800\" height=\"500\" title=\"\"><\/p>\n<p><strong>\u0628\u0631\u0627\u06cc \u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u0648\u0627\u062d\u062f \u0628\u0627 \u0634\u0646\u0627\u0633\u0647<\/strong><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo96p5ynolkvkl7tvkgrr.png\" alt=\"\u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u0645\u062d\u0635\u0648\u0644 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0634\u0646\u0627\u0633\u0647\" loading=\"lazy\" width=\"800\" height=\"500\" title=\"\"><\/p>\n<p>\u0633\u067e\u0633 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0627 \u0628\u0631\u0631\u0633\u06cc \u0645\u062c\u062f\u062f \u0647\u0645\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a\u060c \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0622\u06cc\u0627 \u0645\u062d\u0635\u0648\u0644 \u0648\u0627\u0642\u0639\u0627\u064b \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0632\u06cc\u0631\u0627 \u0645\u06cc\u200c\u0628\u06cc\u0646\u06cc\u0645 \u06a9\u0647 \u0645\u062d\u0635\u0648\u0644 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxnuvqwslmc7azkogtaxr.png\" alt=\"\u062f\u0631\u06cc\u0627\u0641\u062a \u0647\u0645\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a-2\" loading=\"lazy\" width=\"800\" height=\"500\" title=\"\"><\/p>\n<p><strong>\u0628\u0631\u0627\u06cc \u062d\u0630\u0641 \u06cc\u06a9 \u0645\u062d\u0635\u0648\u0644 \u0648\u0627\u062d\u062f \u0628\u0627 \u0634\u0646\u0627\u0633\u0647<\/strong><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi76gg1xury87xq21ses6.png\" alt=\"\u062d\u0630\u0641 \u0645\u062d\u0635\u0648\u0644 \u0628\u0627 \u0634\u0646\u0627\u0633\u0647\" loading=\"lazy\" width=\"800\" height=\"500\" title=\"\"><\/p>\n<p>\u0633\u067e\u0633 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u06cc\u06a9 \u062a\u0645\u0627\u0633 \u062f\u06cc\u06af\u0631 \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u06cc\u0646 \u0645\u062d\u0635\u0648\u0644 \u0628\u0631\u0642\u0631\u0627\u0631 \u06a9\u0646\u06cc\u0645 \u0648 \u0628\u0628\u06cc\u0646\u06cc\u0645 \u0622\u06cc\u0627 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06cc\u0627 \u062e\u06cc\u0631\u060c \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0632\u06cc\u0631 \u0645\u06cc\u200c\u0628\u06cc\u0646\u06cc\u0645 \u06a9\u0647 \u062a\u0639\u062f\u0627\u062f \u0627\u0642\u0644\u0627\u0645 \u06cc\u06a9 \u06a9\u0627\u0647\u0634 \u06cc\u0627\u0641\u062a\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f \u0645\u062d\u0635\u0648\u0644 \u0648\u0627\u0642\u0639\u0627\u064b \u062d\u0630\u0641 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnajf5jwv04ts8pkn3j49.png\" alt=\"\u062f\u0631\u06cc\u0627\u0641\u062a \u0647\u0645\u0647 \u0645\u062d\u0635\u0648\u0644\u0627\u062a-3\" loading=\"lazy\" width=\"800\" height=\"500\" title=\"\"> <\/p>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0622\u0632\u0645\u0648\u0646 \u0646\u0647\u0627\u06cc\u06cc \u062a\u0623\u06cc\u06cc\u062f \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u062a\u0648\u0627\u0628\u0639 Lambda \u0648 \u062c\u062f\u0648\u0644 DynamoDB \u0645\u0627 \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u0627\u06cc\u062c\u0627\u062f \u0648 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0634\u062f\u0647 \u0627\u0646\u062f. \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0632\u06cc\u0631 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0647\u0631 \u062f\u0648 \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0634\u062f\u0646\u062f\u060c \u0628\u0644\u0647! \ud83d\ude01\ud83d\udd7a\ud83c\udfff<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxdhqeaji6km86onsypqu.png\" alt=\"\u0644\u0627\u0645\u0628\u062f\u0627\" loading=\"lazy\" width=\"800\" height=\"466\" title=\"\"><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxibkhxb8srdlghivfcqd.png\" alt=\"DynamoDB\" loading=\"lazy\" width=\"800\" height=\"464\" title=\"\"><\/p>\n<p>\u062f\u0631 \u067e\u0627\u06cc\u0627\u0646\u060c \u0645\u0627 \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u062a\u0648\u0627\u0628\u0639 Lambda \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0639\u0645\u0644\u06cc\u0627\u062a CRUD \u0648 \u062a\u0639\u0627\u0645\u0644 \u0628\u0627 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 DynamoDB \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Node.js \u0648 TypeScript \u0633\u0627\u062e\u062a\u0647\u200c\u0627\u06cc\u0645. \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0627\u06cc\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u0627\u0633\u0627\u0633\u06cc \u0639\u0645\u0644 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0641\u0636\u0627\u06cc \u06a9\u0627\u0641\u06cc \u0628\u0631\u0627\u06cc \u06af\u0633\u062a\u0631\u0634 \u0648 \u062a\u0642\u0648\u06cc\u062a \u0627\u06cc\u0646 \u0645\u0641\u0627\u0647\u06cc\u0645 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f. \u0627\u0645\u0627 \u0647\u062f\u0641 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0627\u0631\u0627\u0626\u0647 \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u0634\u0631\u0648\u0639 \u0645\u062d\u06a9\u0645 \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646\u06cc \u0627\u0633\u062a \u06a9\u0647 \u067e\u062a\u0627\u0646\u0633\u06cc\u0644 \u0645\u0639\u0645\u0627\u0631\u06cc \u0628\u062f\u0648\u0646 \u0633\u0631\u0648\u0631 \u0648 \u06a9\u0627\u0631\u0628\u0631\u062f\u0647\u0627\u06cc \u0639\u0645\u0644\u06cc \u0622\u0646 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u0646\u062f.<\/p>\n<p>\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u062f \u0645\u0646\u0628\u0639 \u0631\u0627 \u062f\u0631 Github \u067e\u06cc\u062f\u0627 \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0645\u0646 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0622\u0645\u0627\u062f\u0647 \u0633\u0648\u0627\u0644\u0627\u062a \u0648 \u062a\u0639\u0627\u0645\u0644\u0627\u062a \u0628\u06cc\u0634\u062a\u0631 \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u06cc\u0646 \u0648 \u0633\u0627\u06cc\u0631 \u0645\u0648\u0636\u0648\u0639\u0627\u062a \u06a9\u062f\u06af\u0630\u0627\u0631\u06cc \u0641\u0646\u06cc \u0647\u0633\u062a\u0645.<\/p>\n<p>\u06cc\u0627\u062f \u0628\u06af\u06cc\u0631\u06cc\u062f\u060c \u06a9\u062f\u0646\u0648\u06cc\u0633\u06cc \u0645\u0628\u0627\u0631\u06a9 \ud83d\ude80<\/p>\n<p>\u0645\u0646 \u0631\u0627 \u062f\u0631 \u0644\u06cc\u0646\u06a9\u062f\u06cc\u0646 \u0627\u06cc\u0646\u062c\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Node.js \u0628\u0647 \u067e\u0644\u062a\u0641\u0631\u0645\u06cc \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0633\u0645\u062a \u0633\u0631\u0648\u0631 \u0628\u0627 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062a\u0628\u062f\u06cc\u0644 \u0634\u062f\u0647 \u0627\u0633\u062a. \u0627\u06a9\u0648\u0633\u06cc\u0633\u062a\u0645 \u0622\u0646\u060c \u06a9\u0647 \u0628\u0627 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0627\u0633\u0627\u0633\u06cc \u0645\u0627\u0646\u0646\u062f Express \u0634\u0631\u0648\u0639 \u0645\u06cc \u0634\u0648\u062f\u060c \u0628\u0647 \u0637\u0648\u0631 \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647\u06cc \u062a\u06a9\u0627\u0645\u0644 \u06cc\u0627\u0641\u062a\u0647 \u0627\u0633\u062a \u0648 \u0686\u0627\u0631\u0686\u0648\u0628 \u0647\u0627 \u0648 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0647\u0627\u06cc \u0645\u062a\u0646\u0648\u0639\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u067e\u0627\u0631\u0627\u062f\u0627\u06cc\u0645 \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0637\u0631\u0627\u062d\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f. \u0628\u0647 \u0637\u0648\u0631 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":91479,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/media2.dev.to\/dynamic\/image\/width=1000,height=500,fit=cover,gravity=auto,format=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fllirql25n3fk80dc3nzn.jpg","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-91478","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\/91478","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=91478"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/91478\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/91479"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=91478"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=91478"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=91478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}