{"id":9411,"date":"2023-03-01T21:51:55","date_gmt":"2023-03-01T18:21:55","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/developing-professional-api-with-azure-function-typescript-boilerplate-a88\/"},"modified":"2023-03-01T21:51:55","modified_gmt":"2023-03-01T18:21:55","slug":"developing-professional-api-with-azure-function-typescript-boilerplate-a88","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/developing-professional-api-with-azure-function-typescript-boilerplate-a88\/","title":{"rendered":"\u062a\u0648\u0633\u0639\u0647 API \u062d\u0631\u0641\u0647 \u0627\u06cc \u0628\u0627 Azure Function Typescript + Boilerplate"},"content":{"rendered":"<div data-article-id=\"1382569\" id=\"article-body\">\n<p>\u0647\u062f\u0641 \u0645\u0642\u0627\u0644\u0647 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0627\u0631\u0627\u0626\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u062f\u0631 \u0645\u0648\u0631\u062f \u0686\u0627\u0631\u0686\u0648\u0628\u060c \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u0648 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0647\u0627\u06cc \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0634\u062f\u0647 \u0628\u0631\u0627\u06cc \u0645\u062e\u0632\u0646 github \u0627\u0633\u062a <code>Azure Function Node.js Typescript Starter and Boilerplate<\/code> \u062f\u0631 https:\/\/github.com\/safwanmasarik\/Azure-Function-Boilerplate-Api.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 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 ' ><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/developing-professional-api-with-azure-function-typescript-boilerplate-a88\/#%D9%86%DA%A9%D8%A7%D8%AA_%D9%85%D9%87%D9%85_%D8%A7%DB%8C%D9%86_%D8%AF%DB%8C%DA%AF_%D8%A8%D8%AE%D8%A7%D8%B1\" >\u0646\u06a9\u0627\u062a \u0645\u0647\u0645 \u0627\u06cc\u0646 \u062f\u06cc\u06af \u0628\u062e\u0627\u0631:<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/developing-professional-api-with-azure-function-typescript-boilerplate-a88\/#%D9%81%D9%86%D8%A7%D9%88%D8%B1%DB%8C_Back-end_API\" >\u0641\u0646\u0627\u0648\u0631\u06cc Back-end API<\/a><\/li><\/ul><\/li><\/ul><\/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\/developing-professional-api-with-azure-function-typescript-boilerplate-a88\/#%D8%B3%D8%A7%D8%AE%D8%AA%D8%A7%D8%B1_%D9%BE%D9%88%D8%B4%D9%87\" >\u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0648\u0634\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/developing-professional-api-with-azure-function-typescript-boilerplate-a88\/#%DA%86%D8%A7%D8%B1%DA%86%D9%88%D8%A8_%D9%88_%DA%AF%D8%B1%D8%AF%D8%B4_%DA%A9%D8%A7%D8%B1\" >\u0686\u0627\u0631\u0686\u0648\u0628 \u0648 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/developing-professional-api-with-azure-function-typescript-boilerplate-a88\/#%D9%BE%D8%B4%D8%AA%DB%8C%D8%A8%D8%A7%D9%86%DB%8C_%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87_%D9%87%D8%A7_%D9%88_%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1\" >\u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0647\u0627 \u0648 \u0627\u0628\u0632\u0627\u0631<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/developing-professional-api-with-azure-function-typescript-boilerplate-a88\/#%D8%B4%D8%A7%D8%AF%DB%8C_%D8%A2%D9%88%D8%B1\" >\u0634\u0627\u062f\u06cc \u0622\u0648\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/developing-professional-api-with-azure-function-typescript-boilerplate-a88\/#json2typescript\" >json2typescript<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/developing-professional-api-with-azure-function-typescript-boilerplate-a88\/#%D8%AF%D8%A7%D8%AF%D9%87_%D9%87%D8%A7%DB%8C_JSON_%D8%B1%D8%A7_%D8%A8%D9%87_%DA%A9%D9%84%D8%A7%D8%B3_Typescript_%D8%AA%D8%A8%D8%AF%DB%8C%D9%84_%DA%A9%D9%86%DB%8C%D8%AF\" >\u062f\u0627\u062f\u0647 \u0647\u0627\u06cc JSON \u0631\u0627 \u0628\u0647 \u06a9\u0644\u0627\u0633 Typescript \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/developing-professional-api-with-azure-function-typescript-boilerplate-a88\/#%D9%85%D8%B4%D8%A7%D9%87%D8%AF%D9%87_%D9%88_%D8%A7%D8%B9%D8%AA%D8%A8%D8%A7%D8%B1%D8%B3%D9%86%D8%AC%DB%8C_%D8%AF%D8%A7%D8%AF%D9%87_%D9%87%D8%A7%DB%8C_JSON\" >\u0645\u0634\u0627\u0647\u062f\u0647 \u0648 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc JSON<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/developing-professional-api-with-azure-function-typescript-boilerplate-a88\/#%D9%86%D8%AD%D9%88%D9%87_%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86_%D9%86%D9%82%D8%B7%D9%87_%D9%BE%D8%A7%DB%8C%D8%A7%D9%86%DB%8C_API_%D8%AC%D8%AF%DB%8C%D8%AF\" >\u0646\u062d\u0648\u0647 \u0627\u0641\u0632\u0648\u062f\u0646 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc API \u062c\u062f\u06cc\u062f<\/a><\/li><\/ul><\/nav><\/div>\n<h4><span class=\"ez-toc-section\" id=\"%D9%86%DA%A9%D8%A7%D8%AA_%D9%85%D9%87%D9%85_%D8%A7%DB%8C%D9%86_%D8%AF%DB%8C%DA%AF_%D8%A8%D8%AE%D8%A7%D8%B1\"><\/span>\n<p>  \u0646\u06a9\u0627\u062a \u0645\u0647\u0645 \u0627\u06cc\u0646 \u062f\u06cc\u06af \u0628\u062e\u0627\u0631:<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ul>\n<li>\u26a1\ufe0f \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u062a\u0627\u06cc\u067e \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062a\u0627\u0628\u0639 Azure<\/li>\n<li>\u2668\ufe0f \u0642\u0627\u0628\u0644\u06cc\u062a \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u062c\u062f\u062f \u062f\u0627\u063a &#8211; \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062f\u0631 \u0630\u062e\u06cc\u0631\u0647 \u0648 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u062c\u062f\u062f \u0633\u0631\u0648\u0631<\/li>\n<li>\ud83c\udccf Jest \u2014 \u0628\u0631\u0627\u06cc \u062a\u0633\u062a \u0648\u0627\u062d\u062f + \u067e\u0627\u0633\u062e db \u062a\u0645\u0633\u062e\u0631 \u0622\u0645\u06cc\u0632 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a<\/li>\n<li>\u2728 \u0628\u0633\u062a\u0647 Linq &#8211; \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u06cc \u0628\u0631\u0627\u06cc lodash\u060c \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 Typescript \u0628\u0631\u0627\u06cc \u0634\u0645\u0627\u0631\u0634 \u0645\u062c\u0645\u0648\u0639\u0647 \u0647\u0627<\/li>\n<li>\ud83d\udccf \u0628\u0633\u062a\u0647 Mssql &#8211; \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0645\u062d\u0644\u06cc<\/li>\n<li>\ud83d\udca8 \u0628\u0633\u062a\u0647 Json2Typescript &#8211; \u0645\u062f\u0644 \u0633\u0627\u0632\u06cc \u0634\u06cc json \u0628\u0647 \u0634\u06cc Typescript<\/li>\n<li>\ud83e\udd23 \u0628\u0633\u062a\u0647 \u0634\u0627\u062f &#8211; Joi \u0628\u0631\u0627\u06cc Typescript\u060c \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc api \u0628\u0627 class &#038; @decorators.<\/li>\n<li>\ud83d\udcc8 \u0639\u06cc\u0628\u200c\u06cc\u0627\u0628\u06cc \u067e\u0631\u0648\u0698\u0647 \u062a\u0627\u06cc\u067e \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0641\u0639\u0627\u0644 \u0634\u062f &#8211; \u0628\u0627 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u06a9\u0631\u062f\u0646 \u062f\u0631 \u067e\u0633\u200c\u0632\u0645\u06cc\u0646\u0647 \u0648 \u0646\u0645\u0627\u06cc\u0634 \u062e\u0637\u0627 \u062f\u0631 \u0646\u0648\u0627\u0631 \u0645\u0634\u06a9\u0644\u0627\u062a\u060c \u0628\u0647 \u0633\u0631\u0639\u062a \u062e\u0637\u0627 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u0641\u0631\u0645\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u062f\u0631 \u0630\u062e\u06cc\u0631\u0647<\/li>\n<li>\ud83c\udf08 \u0631\u0646\u06af\u200c\u06a9\u0646\u0646\u062f\u0647 \u062c\u0641\u062a \u0628\u0631\u0627\u06a9\u062a \u0641\u0639\u0627\u0644 \u0627\u0633\u062a<\/li>\n<li>\ud83e\udd16 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u06a9\u0627\u0645\u0644 \u0648 \u0647\u0648\u0634\u0645\u0646\u062f\u0627\u0646\u0647 \u06a9\u062f \u0648\u06cc\u0698\u0648\u0627\u0644 \u0627\u0633\u062a\u0648\u062f\u06cc\u0648.<\/li>\n<li>\ud83e\udda0 \u0645\u0639\u0645\u0627\u0631\u06cc \u0645\u06cc\u06a9\u0631\u0648\u0633\u0631\u0648\u06cc\u0633 &#8211; \u0645\u062e\u0632\u0646 \u062c\u062f\u0627\u06af\u0627\u0646\u0647 api \u0648 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647\u060c \u0628\u062f\u0648\u0646 ORM.<\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"%D9%81%D9%86%D8%A7%D9%88%D8%B1%DB%8C_Back-end_API\"><\/span>\n<p>  \u0641\u0646\u0627\u0648\u0631\u06cc Back-end API<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ul>\n<li>\u062a\u0648\u0627\u0628\u0639 \u0644\u0627\u062c\u0648\u0631\u062f\u06cc<\/li>\n<li>Node.js<\/li>\n<li>TypeScript<\/li>\n<li>\u0645\u0627\u06cc\u06a9\u0631\u0648\u0633\u0627\u0641\u062a SQL Server<\/li>\n<\/ul>\n<p>\u0641\u0627\u06cc\u0644 README \u062f\u0631 \u0645\u062e\u0632\u0646 \u062d\u0627\u0648\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0627\u0641\u06cc \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0645\u0648\u0641\u0642\u06cc\u062a \u0622\u0645\u06cc\u0632 \u067e\u0631\u0648\u0698\u0647 \u0627\u0633\u062a.<\/p>\n<hr\/>\n<p>\u0628\u06cc\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u0645.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B3%D8%A7%D8%AE%D8%AA%D8%A7%D8%B1_%D9%BE%D9%88%D8%B4%D9%87\"><\/span>\n<p>  \u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0648\u0634\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><\/p>\n<ul>\n<li>\n<code>.vscode<\/code>  \u0634\u0627\u0645\u0644 \u062a\u0648\u0635\u06cc\u0647 \u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0641\u0632\u0648\u062f\u0646\u06cc\u060c \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc\u060c \u0648\u0638\u0627\u06cc\u0641 \u0633\u0627\u062e\u062a \u0648 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u067e\u06cc\u0634 \u0641\u0631\u0636 IDE \u0627\u0633\u062a. <em>\u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a IDE \u062f\u0631 <code>workspace.code-workspace<\/code> \u0644\u063a\u0648 \u062e\u0648\u0627\u0647\u062f \u0634\u062f <code>.vscode\/settings<\/code><\/em>.<\/li>\n<li>\u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0648\u0634\u0647 \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u0628\u0631\u0627\u06cc Azure Function Node.js \u062d\u0641\u0638 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062a\u0648\u0627\u0628\u0639 API \u0628\u0627\u06cc\u062f \u062f\u0631 \u0641\u0647\u0631\u0633\u062a \u0627\u0635\u0644\u06cc \u0642\u0631\u0627\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646\u062f.  \u0646\u0627\u0645 \u06af\u0630\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u062a\u0648\u0627\u0628\u0639 API \u0628\u0627 \u067e\u06cc\u0634\u0648\u0646\u062f \u0627\u0633\u062a <code>az_*<\/code> \u0628\u0631\u0627\u06cc \u0645\u0631\u062a\u0628 \u06a9\u0631\u062f\u0646 \u0647\u0645\u0647 \u062a\u0648\u0627\u0628\u0639 API \u062f\u0631 \u0628\u0627\u0644\u0627.<\/li>\n<li>\u0646\u0645\u0648\u0646\u0647 \u0647\u0627\u06cc\u06cc \u0627\u0632 \u0646\u0627\u0645\u06af\u0630\u0627\u0631\u06cc API \u0628\u0631 \u0627\u0633\u0627\u0633 \u0646\u0648\u0639 \u062a\u0627\u0628\u0639 \u0645\u0627\u0646\u0646\u062f <code>http<\/code>\u060c<code>timerTrigger<\/code> \u06cc\u0627 <code>queueTrigger<\/code>.<br \/>\n<img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/03\/1677694913_111_\u062a\u0648\u0633\u0639\u0647-API-\u062d\u0631\u0641\u0647-\u0627\u06cc-\u0628\u0627-Azure-Function-Typescript-Boilerplate.png\" alt=\"api-nameing-example\" loading=\"lazy\" width=\"270\" height=\"145\" title=\"\">\n<\/li>\n<li>\u067e\u0648\u0634\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9\u06cc \u0634\u0627\u0645\u0644 \u0644\u0627\u06cc\u0647 \u0647\u0627\u06cc \u0627\u0635\u0644\u06cc \u0645\u0627\u0646\u0646\u062f \u062e\u062f\u0645\u0627\u062a (\u0645\u0646\u0637\u0642 \u062a\u062c\u0627\u0631\u06cc)\u060c \u0644\u0627\u06cc\u0647 \u062f\u0627\u062f\u0647\u060c \u0645\u062f\u0644 \u0633\u0627\u0632\u06cc \u0648 \u06a9\u0645\u06a9 \u06a9\u0646\u0646\u062f\u0647 \u0627\u0633\u062a.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%DA%86%D8%A7%D8%B1%DA%86%D9%88%D8%A8_%D9%88_%DA%AF%D8%B1%D8%AF%D8%B4_%DA%A9%D8%A7%D8%B1\"><\/span>\n<p>  \u0686\u0627\u0631\u0686\u0648\u0628 \u0648 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/03\/1677694913_465_\u062a\u0648\u0633\u0639\u0647-API-\u062d\u0631\u0641\u0647-\u0627\u06cc-\u0628\u0627-Azure-Function-Typescript-Boilerplate.png\" alt=\"\u067e\u0648\u0634\u0647 \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06af\u0630\u0627\u0634\u062a\u0647 \u0634\u062f\u0647\" loading=\"lazy\" width=\"191\" height=\"171\" title=\"\"><\/p>\n<ol>\n<li>\u0686\u0627\u0631\u0686\u0648\u0628 \u0627\u062a\u062e\u0627\u0630 \u0634\u062f\u0647 \u0628\u0647 \u0634\u0631\u062d \u0632\u06cc\u0631 \u0627\u0633\u062a <code>domain-driven approach<\/code>\u060c \u0628\u0627 \u0644\u0627\u06cc\u0647 \u0647\u0627\u06cc \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u0628\u0631\u0627\u06cc <code>API<\/code>\u060c <code>service<\/code>\u060c \u0648 <code>data<\/code>.<\/li>\n<li>\u0627\u0648\u0644\u06cc\u0646 \u0646\u0642\u0637\u0647 \u0648\u0631\u0648\u062f \u0627\u0633\u062a <code>API<\/code> \u0644\u0627\u06cc\u0647 \u0627\u06cc \u06a9\u0647 \u0628\u0627 \u0622\u0646 \u062a\u0645\u0627\u0633 \u0645\u06cc \u06af\u06cc\u0631\u062f <code>service<\/code> \u0644\u0627\u06cc\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f \u0648 \u067e\u0627\u0633\u062e api \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f\u0647 \u0634\u0648\u062f.<\/li>\n<li>\u0627\u06cc\u0646 <code>service<\/code> \u0644\u0627\u06cc\u0647 \u0645\u0646\u0637\u0642 \u062a\u062c\u0627\u0631\u06cc \u0645\u0627\u0646\u0646\u062f <code>calculations<\/code> \u0648 <code>data formatting<\/code>.  \u0647\u0645\u0686\u0646\u06cc\u0646 \u062a\u0645\u0627\u0633 \u0628\u0627 <code>data<\/code> \u0644\u0627\u06cc\u0647.<\/li>\n<li>\u0627\u06cc\u0646 <code>data<\/code> \u0644\u0627\u06cc\u0647 \u062a\u0646\u0647\u0627 \u0648\u0638\u06cc\u0641\u0647 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u0628\u0631 \u0639\u0647\u062f\u0647 \u062f\u0627\u0631\u062f.  \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0627\u0632 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u06cc\u0627 API \u0634\u062e\u0635 \u062b\u0627\u0644\u062b \u0628\u0627\u06cc\u062f \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0627\u0646\u062c\u0627\u0645 \u0634\u0648\u062f.<\/li>\n<li>\u0628\u06cc\u0634\u062a\u0631 \u0627\u0634\u06cc\u0627\u0621 JSON \u0628\u0647 \u0634\u06cc \u06a9\u0644\u0627\u0633 Typescript \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc \u0634\u0648\u0646\u062f \u0648 \u06a9\u0644\u0627\u0633 \u0647\u0627\u060c \u0631\u0627\u0628\u0637 \u0647\u0627 \u0648 enum \u0647\u0627 \u062f\u0631 \u067e\u0648\u0634\u0647 models \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u0634\u0648\u0646\u062f.<\/li>\n<li>\u0647\u0645\u0647 \u06a9\u0644\u0627\u0633 \u0647\u0627 \u0648 \u062a\u0648\u0627\u0628\u0639\u06cc \u06a9\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647 \u0645\u06cc \u0634\u0648\u0646\u062f <code>helpers<\/code> \u062f\u0631 \u067e\u0648\u0634\u0647 helpers \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u0634\u0648\u062f.<\/li>\n<li>\u0628\u0631\u0627\u06cc <code>unit testing<\/code>\u060c \u0641\u0642\u0637 <code>service<\/code> \u0644\u0627\u06cc\u0647 \u0648 \u0644\u0627\u0632\u0645 <code>helpers<\/code> \u0645\u0648\u0631\u062f \u0622\u0632\u0645\u0627\u06cc\u0634 \u0642\u0631\u0627\u0631 \u062e\u0648\u0627\u0647\u062f \u06af\u0631\u0641\u062a. <code>Unit testing<\/code> \u0646\u0628\u0627\u06cc\u062f \u062a\u0645\u0627\u0633 \u0648\u0627\u0642\u0639\u06cc \u0628\u0627 \u0644\u0627\u06cc\u0647 \u062f\u0627\u062f\u0647 \u0627\u0646\u062c\u0627\u0645 \u0634\u0648\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u067e\u0627\u0633\u062e \u0647\u0627\u06cc \u062f\u0627\u062f\u0647 \u0628\u0627\u06cc\u062f \u0645\u0633\u062e\u0631\u0647 \u0634\u0648\u0646\u062f.<\/li>\n<li>\n<code>Data<\/code>  \u062a\u0633\u062a \u0644\u0627\u06cc\u0647 \u062a\u062d\u062a \u067e\u0648\u0634\u0634 \u0642\u0631\u0627\u0631 \u062e\u0648\u0627\u0647\u062f \u06af\u0631\u0641\u062a <code>integration test<\/code> \u06a9\u0647 \u062a\u0645\u0627\u0633 \u0648\u0627\u0642\u0639\u06cc api \u0648 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0648\u0627\u0642\u0639\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u0627\u0632 \u0645\u0646\u0628\u0639 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f.  \u0646\u0645\u0648\u0646\u0647 \u062a\u0633\u062a \u0627\u062f\u063a\u0627\u0645 \u0628\u0627 \u0645\u062c\u0645\u0648\u0639\u0647 \u067e\u0633\u062a\u0686\u06cc \u0628\u0631\u0627\u06cc \u0639\u0645\u0644\u06cc\u0627\u062a CRUDE \u062f\u0631 \u067e\u0648\u0634\u0647 \u0645\u0648\u062c\u0648\u062f \u0627\u0633\u062a <code>postman\/AzFuncBoilerplate-IntegrationTest.postman_collection.json<\/code>.  \u062f\u0631 \u0627\u06cc\u0646 \u067e\u0633\u062a \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0637\u0627\u0644\u0628 \u0646\u0645\u06cc \u067e\u0631\u062f\u0627\u0632\u06cc\u0645.<\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%D8%B4%D8%AA%DB%8C%D8%A8%D8%A7%D9%86%DB%8C_%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87_%D9%87%D8%A7_%D9%88_%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1\"><\/span>\n<p>  \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0647\u0627 \u0648 \u0627\u0628\u0632\u0627\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"%D8%B4%D8%A7%D8%AF%DB%8C_%D8%A2%D9%88%D8%B1\"><\/span>\n<p>  \u0634\u0627\u062f\u06cc \u0622\u0648\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u067e\u0631\u0633 \u0648 \u062c\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06cc\u0627 \u0648\u0631\u0648\u062f\u06cc \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc \u0628\u062f\u0646\u0647 \u062f\u0627\u0631\u0627\u06cc \u0645\u062d\u062f\u0648\u062f\u06cc\u062a\u200c\u0647\u0627\u06cc\u06cc \u0647\u0633\u062a\u0646\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0627\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0634\u0648\u0646\u062f.  \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u0627\u0646\u062c\u0627\u0645 \u0622\u0646 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u0627\u062c\u0631\u0627\u06cc \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"k\">import<\/span> <span class=\"o\">*<\/span> <span class=\"k\">as<\/span> <span class=\"nx\">jf<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">joiful<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n\n<span class=\"c1\">\/\/ Get the request body<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">params<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">ReqCreateUpdateDeleteShip<\/span><span class=\"p\">();<\/span>\n<span class=\"nx\">params<\/span><span class=\"p\">.<\/span><span class=\"nx\">ship_name<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">req<\/span><span class=\"p\">?.<\/span><span class=\"nx\">body<\/span><span class=\"p\">?.<\/span><span class=\"nx\">ship_name<\/span> <span class=\"o\">??<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\n<span class=\"nx\">params<\/span><span class=\"p\">.<\/span><span class=\"nx\">ship_code<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">req<\/span><span class=\"p\">?.<\/span><span class=\"nx\">body<\/span><span class=\"p\">?.<\/span><span class=\"nx\">ship_code<\/span> <span class=\"o\">??<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\n\n<span class=\"c1\">\/\/ Validate request body<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">joiValidation<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">jf<\/span><span class=\"p\">.<\/span><span class=\"nx\">validate<\/span><span class=\"p\">(<\/span><span class=\"nx\">params<\/span><span class=\"p\">);<\/span>\n\n<span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nx\">joiValidation<\/span><span class=\"p\">.<\/span><span class=\"nx\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">return<\/span> <span class=\"p\">{<\/span>\n    <span class=\"na\">is_valid<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">message<\/span><span class=\"p\">:<\/span> <span class=\"nx\">joiValidation<\/span><span class=\"p\">.<\/span><span class=\"nx\">error<\/span><span class=\"p\">.<\/span><span class=\"nx\">message<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">data<\/span><span class=\"p\">:<\/span> <span class=\"kc\">null<\/span>\n  <span class=\"p\">};<\/span>\n<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>\u0627\u0639\u0644\u0627\u0645 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a \u0647\u0627\u06cc \u0627\u0639\u062a\u0628\u0627\u0631 \u0633\u0646\u062c\u06cc \u062f\u0631 \u06a9\u0644\u0627\u0633.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"k\">import<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">reflect-metadata<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"o\">*<\/span> <span class=\"k\">as<\/span> <span class=\"nx\">jf<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">joiful<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n\n<span class=\"k\">export<\/span> <span class=\"kd\">class<\/span> <span class=\"nx\">ReqCreateUpdateDeleteShip<\/span> <span class=\"p\">{<\/span>\n\n  <span class=\"p\">@<\/span><span class=\"nd\">jf<\/span><span class=\"p\">.<\/span><span class=\"kr\">number<\/span><span class=\"p\">().<\/span><span class=\"nx\">optional<\/span><span class=\"p\">().<\/span><span class=\"nx\">allow<\/span><span class=\"p\">(<\/span><span class=\"kc\">null<\/span><span class=\"p\">)<\/span>\n  <span class=\"nx\">ship_id<\/span><span class=\"p\">:<\/span> <span class=\"kr\">number<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"p\">@<\/span><span class=\"nd\">jf<\/span><span class=\"p\">.<\/span><span class=\"nx\">boolean<\/span><span class=\"p\">().<\/span><span class=\"nx\">optional<\/span><span class=\"p\">()<\/span>\n  <span class=\"nx\">is_permanent_delete<\/span><span class=\"p\">:<\/span> <span class=\"nx\">boolean<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"p\">@<\/span><span class=\"nd\">jf<\/span><span class=\"p\">.<\/span><span class=\"kr\">string<\/span><span class=\"p\">().<\/span><span class=\"nx\">required<\/span><span class=\"p\">()<\/span>\n  <span class=\"nx\">ship_name<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"p\">@<\/span><span class=\"nd\">jf<\/span><span class=\"p\">.<\/span><span class=\"kr\">string<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">.<\/span><span class=\"nx\">regex<\/span><span class=\"p\">(<\/span><span class=\"sr\">\/^<\/span><span class=\"se\">[<\/span><span class=\"sr\">a-z0-9<\/span><span class=\"se\">]<\/span><span class=\"sr\">+<\/span><span class=\"se\">(<\/span><span class=\"sr\">-<\/span><span class=\"se\">[<\/span><span class=\"sr\">a-z0-9<\/span><span class=\"se\">]<\/span><span class=\"sr\">+<\/span><span class=\"se\">)<\/span><span class=\"sr\">*$\/<\/span><span class=\"p\">,<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">kebab case ('kebab-case', 'going-12-merry', 'jackson')<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">.<\/span><span class=\"nx\">required<\/span><span class=\"p\">()<\/span>\n  <span class=\"nx\">ship_code<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"p\">@<\/span><span class=\"nd\">jf<\/span><span class=\"p\">.<\/span><span class=\"kr\">string<\/span><span class=\"p\">().<\/span><span class=\"nx\">email<\/span><span class=\"p\">()<\/span>\n  <span class=\"nx\">email<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"p\">@<\/span><span class=\"nd\">jf<\/span><span class=\"p\">.<\/span><span class=\"kr\">string<\/span><span class=\"p\">().<\/span><span class=\"nx\">creditCard<\/span><span class=\"p\">()<\/span>\n  <span class=\"nx\">credit_card_number<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">;<\/span>\n<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<h3><span class=\"ez-toc-section\" id=\"json2typescript\"><\/span>\n<p>  json2typescript<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\u067e\u0627\u0633\u062e \u0647\u0627 \u0627\u0632 \u0644\u0627\u06cc\u0647 \u062f\u0627\u062f\u0647 \u0628\u0647 \u0634\u06a9\u0644 \u0634\u06cc JSON \u0645\u06cc \u0622\u06cc\u0646\u062f.  json2typescript \u0627\u0634\u06cc\u0627\u0621 JSON \u0631\u0627 \u0628\u0647 \u0646\u0645\u0648\u0646\u0647 \u0627\u06cc \u0627\u0632 \u06a9\u0644\u0627\u0633 TypeScript \u0628\u0627 \u0646\u0627\u0645 \u0645\u0633\u062a\u0639\u0627\u0631 \u0646\u06af\u0627\u0634\u062a \u0645\u06cc \u06a9\u0646\u062f <code>Deserialization<\/code>.<\/li>\n<li>\u0644\u0627\u06cc\u0647 \u0633\u0631\u0648\u06cc\u0633 \u0627\u0632 \u0645\u062f\u0644\u200c\u0633\u0627\u0632\u06cc \u067e\u0627\u0633\u062e \u0644\u0627\u06cc\u0647 \u062f\u0627\u062f\u0647 \u0633\u0648\u062f \u0645\u06cc\u200c\u0628\u0631\u062f \u0632\u06cc\u0631\u0627 \u06a9\u0644\u0627\u0633 \u0648 \u0648\u06cc\u0698\u06af\u06cc \u062b\u0627\u0628\u062a\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0646\u0637\u0642 \u0648 \u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/li>\n<li>\u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0647\u0648\u0634\u0645\u0646\u062f\u0627\u0646\u0647<\/li>\n<li>\u0622\u0633\u0627\u0646 \u0628\u0631\u0627\u06cc \u062a\u063a\u06cc\u06cc\u0631 -> \u0627\u06af\u0631 \u0646\u0627\u0645 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u067e\u0627\u0633\u062e \u062f\u0627\u062f\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u06a9\u0646\u062f\u060c \u06a9\u0644\u0627\u0633 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0646\u062e\u0648\u0627\u0647\u062f \u062f\u0627\u0634\u062a \u0632\u06cc\u0631\u0627 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u062a\u0632\u0626\u06cc\u0646 \u06a9\u0646\u0646\u062f\u0647 JsonProperty \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0627\u0645\u06a9\u0627\u0646 \u062a\u0646\u0638\u06cc\u0645 \u0622\u0633\u0627\u0646 \u0646\u0642\u0634\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc JSON \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f. <\/li>\n<\/ul>\n<p>\u0633\u0631\u06cc\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">JsonConvert<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">json2typescript<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\n<span class=\"kd\">let<\/span> <span class=\"nx\">jsonConvert<\/span><span class=\"p\">:<\/span> <span class=\"nx\">JsonConvert<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">JsonConvert<\/span><span class=\"p\">();<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">queryData<\/span><span class=\"p\">:<\/span> <span class=\"nx\">object<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">getShip<\/span><span class=\"p\">(<\/span><span class=\"nx\">params<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">let<\/span> <span class=\"nx\">modelledDbData<\/span><span class=\"p\">:<\/span> <span class=\"nx\">DbShip<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">jsonConvert<\/span><span class=\"p\">.<\/span><span class=\"nx\">deserializeArray<\/span><span class=\"p\">(<\/span><span class=\"nx\">queryData<\/span><span class=\"p\">,<\/span> <span class=\"nx\">DbShip<\/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\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u06a9\u0644\u0627\u0633 \u0648 \u0627\u0645\u0644\u0627\u06a9.<\/p>\n<ul>\n<li>\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u06a9\u0644\u0627\u0633 \u0628\u0631\u0627\u06cc \u0646\u0642\u0634\u0647\u200c\u0628\u0631\u062f\u0627\u0631 \u0642\u0627\u0628\u0644 \u0645\u0634\u0627\u0647\u062f\u0647 \u0628\u0627\u0634\u0646\u062f\u060c \u0628\u0627\u06cc\u062f \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0634\u0648\u0646\u062f\u060c \u062f\u0631 \u063a\u06cc\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u0646\u0627\u062f\u06cc\u062f\u0647 \u06af\u0631\u0641\u062a\u0647 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f. <\/li>\n<li>\u0622\u0646\u0647\u0627 \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0647\u0631 \u0645\u0642\u062f\u0627\u0631 (\u0645\u0639\u062a\u0628\u0631)\u060c \u062a\u0639\u0631\u06cc\u0641 \u0646\u0634\u062f\u0647 \u06cc\u0627 \u062a\u0647\u06cc \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0631\u062f.\n<\/li>\n<\/ul>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">JsonObject<\/span><span class=\"p\">,<\/span> <span class=\"nx\">JsonProperty<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">json2typescript<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">DateConverter<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">..\/..\/helpers\/json-converter<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\n\n<span class=\"p\">@<\/span><span class=\"nd\">JsonObject<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">DbShip<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">export<\/span> <span class=\"kd\">class<\/span> <span class=\"nx\">DbShip<\/span> <span class=\"p\">{<\/span>\n  <span class=\"p\">@<\/span><span class=\"nd\">JsonProperty<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">id<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"nb\">Number<\/span><span class=\"p\">,<\/span> <span class=\"kc\">true<\/span><span class=\"p\">)<\/span>\n  <span class=\"nx\">ship_id<\/span><span class=\"p\">:<\/span> <span class=\"kr\">number<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"p\">@<\/span><span class=\"nd\">JsonProperty<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">name<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"nb\">String<\/span><span class=\"p\">,<\/span> <span class=\"kc\">true<\/span><span class=\"p\">)<\/span>\n  <span class=\"nx\">ship_name<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"p\">@<\/span><span class=\"nd\">JsonProperty<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">code<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"nb\">String<\/span><span class=\"p\">,<\/span> <span class=\"kc\">true<\/span><span class=\"p\">)<\/span>\n  <span class=\"nx\">ship_code<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"p\">@<\/span><span class=\"nd\">JsonProperty<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">is_active<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"nb\">Boolean<\/span><span class=\"p\">,<\/span> <span class=\"kc\">true<\/span><span class=\"p\">)<\/span>\n  <span class=\"nx\">is_active<\/span><span class=\"p\">:<\/span> <span class=\"nx\">boolean<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"p\">@<\/span><span class=\"nd\">JsonProperty<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">updated_date<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"nx\">DateConverter<\/span><span class=\"p\">,<\/span> <span class=\"kc\">true<\/span><span class=\"p\">)<\/span>\n  <span class=\"nx\">updated_date<\/span><span class=\"p\">:<\/span> <span class=\"nb\">Date<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/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<p>\u0645\u0628\u062f\u0644 \u0633\u0641\u0627\u0631\u0634\u06cc<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">JsonConvert<\/span><span class=\"p\">,<\/span> <span class=\"nx\">JsonConverter<\/span><span class=\"p\">,<\/span> <span class=\"nx\">JsonCustomConvert<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">json2typescript<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kd\">let<\/span> <span class=\"nx\">jsonConvert<\/span><span class=\"p\">:<\/span> <span class=\"nx\">JsonConvert<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">JsonConvert<\/span><span class=\"p\">();<\/span>\n\n<span class=\"p\">@<\/span><span class=\"nd\">JsonConverter<\/span>\n<span class=\"k\">export<\/span> <span class=\"kd\">class<\/span> <span class=\"nx\">DateConverter<\/span> <span class=\"k\">implements<\/span> <span class=\"nx\">JsonCustomConvert<\/span><span class=\"o\">&lt;<\/span><span class=\"nb\">Date<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">serialize<\/span><span class=\"p\">(<\/span><span class=\"na\">date<\/span><span class=\"p\">:<\/span> <span class=\"nb\">Date<\/span><span class=\"p\">):<\/span> <span class=\"kr\">any<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"nx\">date<\/span><span class=\"p\">.<\/span><span class=\"nx\">getFullYear<\/span><span class=\"p\">()<\/span> <span class=\"o\">+<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">-<\/span><span class=\"dl\">\"<\/span> <span class=\"o\">+<\/span> <span class=\"p\">(<\/span><span class=\"nx\">date<\/span><span class=\"p\">.<\/span><span class=\"nx\">getMonth<\/span><span class=\"p\">()<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span> <span class=\"o\">+<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">-<\/span><span class=\"dl\">\"<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">date<\/span><span class=\"p\">.<\/span><span class=\"nx\">getDate<\/span><span class=\"p\">();<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"nx\">deserialize<\/span><span class=\"p\">(<\/span><span class=\"na\">date<\/span><span class=\"p\">:<\/span> <span class=\"kr\">any<\/span><span class=\"p\">):<\/span> <span class=\"nb\">Date<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"k\">new<\/span> <span class=\"nb\">Date<\/span><span class=\"p\">(<\/span><span class=\"nx\">date<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n<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<h3><span class=\"ez-toc-section\" id=\"%D8%AF%D8%A7%D8%AF%D9%87_%D9%87%D8%A7%DB%8C_JSON_%D8%B1%D8%A7_%D8%A8%D9%87_%DA%A9%D9%84%D8%A7%D8%B3_Typescript_%D8%AA%D8%A8%D8%AF%DB%8C%D9%84_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc JSON \u0631\u0627 \u0628\u0647 \u06a9\u0644\u0627\u0633 Typescript \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/03\/1677694914_552_\u062a\u0648\u0633\u0639\u0647-API-\u062d\u0631\u0641\u0647-\u0627\u06cc-\u0628\u0627-Azure-Function-Typescript-Boilerplate.png\" alt=\"\u0633\u0631\u06cc\u0639 \u062a\u0627\u06cc\u067e\" loading=\"lazy\" width=\"880\" height=\"464\" title=\"\"><\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D9%85%D8%B4%D8%A7%D9%87%D8%AF%D9%87_%D9%88_%D8%A7%D8%B9%D8%AA%D8%A8%D8%A7%D8%B1%D8%B3%D9%86%D8%AC%DB%8C_%D8%AF%D8%A7%D8%AF%D9%87_%D9%87%D8%A7%DB%8C_JSON\"><\/span>\n<p>  \u0645\u0634\u0627\u0647\u062f\u0647 \u0648 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc JSON<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\u0627\u0632 \u0646\u0645\u0627\u06cc\u0634\u06af\u0631 \u0648 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0622\u0646\u0644\u0627\u06cc\u0646 \u062f\u0627\u062f\u0647 JSON \u0645\u0627\u0646\u0646\u062f JSONGrid \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f\n<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/03\/1677694914_42_\u062a\u0648\u0633\u0639\u0647-API-\u062d\u0631\u0641\u0647-\u0627\u06cc-\u0628\u0627-Azure-Function-Typescript-Boilerplate.png\" alt=\"jsongrid\" loading=\"lazy\" width=\"671\" height=\"424\" title=\"\"><\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%AD%D9%88%D9%87_%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86_%D9%86%D9%82%D8%B7%D9%87_%D9%BE%D8%A7%DB%8C%D8%A7%D9%86%DB%8C_API_%D8%AC%D8%AF%DB%8C%D8%AF\"><\/span>\n<p>  \u0646\u062d\u0648\u0647 \u0627\u0641\u0632\u0648\u062f\u0646 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc API \u062c\u062f\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ol>\n<li>\u06cc\u06a9 \u06a9\u067e\u06cc \u0627\u0632 \u06cc\u06a9 \u067e\u0648\u0634\u0647 api \u062a\u0647\u06cc\u0647 \u06a9\u0646\u06cc\u062f.<br \/>\n<img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/03\/1677694914_255_\u062a\u0648\u0633\u0639\u0647-API-\u062d\u0631\u0641\u0647-\u0627\u06cc-\u0628\u0627-Azure-Function-Typescript-Boilerplate.png\" alt=\"api-01\" loading=\"lazy\" width=\"259\" height=\"96\" title=\"\">\n<\/li>\n<li>\u0628\u0631\u0627\u06cc \u0622\u0633\u0627\u0646 \u06a9\u0631\u062f\u0646 \u0632\u0646\u062f\u06af\u06cc\u060c \u0622\u0646 \u0631\u0627 \u062d\u0630\u0641 \u06a9\u0646\u06cc\u062f <code>__test__<\/code> \u067e\u0648\u0634\u0647 \u062f\u0627\u062e\u0644 \u067e\u0648\u0634\u0647 \u062c\u062f\u06cc\u062f <\/li>\n<li>\u0646\u0627\u0645 \u067e\u0648\u0634\u0647 \u062c\u062f\u06cc\u062f \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f \u0648 \u0646\u0627\u0645 \u067e\u0648\u0634\u0647 \u0631\u0627 \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f.<br \/>\n<img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/03\/1677694915_914_\u062a\u0648\u0633\u0639\u0647-API-\u062d\u0631\u0641\u0647-\u0627\u06cc-\u0628\u0627-Azure-Function-Typescript-Boilerplate.png\" alt=\"api-02\" loading=\"lazy\" width=\"236\" height=\"86\" title=\"\">\n<\/li>\n<li>\u0631\u0627 \u0628\u0647 \u0631\u0648\u0632 \u06a9\u0646\u06cc\u062f <code>function.json<\/code>\u060c <code>scriptFile<\/code> \u0645\u0642\u062f\u0627\u0631 \u0646\u0627\u0645 \u067e\u0648\u0634\u0647 \u062c\u062f\u06cc\u062f<br \/>\n<img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/03\/1677694915_43_\u062a\u0648\u0633\u0639\u0647-API-\u062d\u0631\u0641\u0647-\u0627\u06cc-\u0628\u0627-Azure-Function-Typescript-Boilerplate.png\" alt=\"api-03\" loading=\"lazy\" width=\"880\" height=\"367\" title=\"\">\n<\/li>\n<li>\u062d\u0627\u0644\u0627 \u0628\u0631\u0648 <code>index.ts<\/code> \u0648 \u0646\u0627\u0645 \u062a\u0627\u0628\u0639 \u0631\u0627 \u0628\u0647 \u0646\u0627\u0645 \u067e\u0648\u0634\u0647 \u0628\u0647 \u0631\u0648\u0632 \u06a9\u0646\u06cc\u062f.<br \/>\n<img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/03\/1677694915_71_\u062a\u0648\u0633\u0639\u0647-API-\u062d\u0631\u0641\u0647-\u0627\u06cc-\u0628\u0627-Azure-Function-Typescript-Boilerplate.png\" alt=\"api-04\" loading=\"lazy\" width=\"515\" height=\"122\" title=\"\">\n<\/li>\n<li>\u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc API \u062c\u062f\u06cc\u062f \u0634\u0645\u0627 \u0622\u0645\u0627\u062f\u0647 \u0627\u0633\u062a.  \u0645\u0637\u0628\u0648\u0639\u0627\u062a <code>F5<\/code> \u0628\u0631\u0627\u06cc \u062f\u0648\u06cc\u062f\u0646 <code>debug<\/code> \u062d\u0627\u0644\u062a \u062f\u0647\u06cc\u062f \u0648 \u0622\u0646 \u0631\u0627 \u062a\u0633\u062a \u06a9\u0646\u06cc\u062f.<br \/>\n<img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/03\/1677694915_63_\u062a\u0648\u0633\u0639\u0647-API-\u062d\u0631\u0641\u0647-\u0627\u06cc-\u0628\u0627-Azure-Function-Typescript-Boilerplate.png\" alt=\"api-05\" loading=\"lazy\" width=\"880\" height=\"261\" title=\"\">\n<\/li>\n<li>\u062f\u0631\u062d\u0627\u0644\u06cc\u06a9\u0647 \u062f\u0631 <code>debug<\/code> \u062d\u0627\u0644\u062a \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0644\u0627\u06cc\u0647 \u0633\u0631\u0648\u06cc\u0633\u06cc \u0631\u0627 \u06a9\u0647 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u062f \u0644\u0627\u06cc\u0647 api \u0634\u0645\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u06a9\u0646\u062f\u060c \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f.  \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f \u0648 \u062f\u0631 \u0630\u062e\u06cc\u0631\u0647 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u0645\u06cc \u0634\u0648\u062f \u0648 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u062c\u062f\u062f \u0633\u0631\u0648\u0631 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u0634\u0648\u062f.<\/li>\n<li>\u0644\u0637\u0641\u0627 \u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u062d\u06cc\u0637 \u0647\u0627 \u0628\u0647 \u06af\u0648\u0646\u0647 \u0627\u06cc \u06a9\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u0642\u0627\u062f\u06cc\u0631 \u062f\u0631 <code>local.settings.json<\/code> \u0627\u0632 \u0634\u0645\u0627 \u0645\u06cc \u062e\u0648\u0627\u0647\u062f \u06a9\u0647 \u0633\u0631\u0648\u0631 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u0633\u062a\u06cc \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u062c\u062f\u062f \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ol>\n<hr\/>\n<p>\u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0648\u0642\u062a \u06af\u0630\u0627\u0634\u062a\u06cc\u062f \u0648 \u0627\u0648\u0644\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0641\u0646\u06cc \u0639\u0645\u0648\u0645\u06cc \u0645\u0646 \u0631\u0627 \u062e\u0648\u0627\u0646\u062f\u06cc\u062f \u0645\u062a\u0634\u06a9\u0631\u0645.  \u0645\u0646 \u0627\u0632 \u062c\u0627\u0645\u0639\u0647 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u0647 \u0641\u0648\u0642\u200c\u0627\u0644\u0639\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0631\u0634 \u0645\u0646 \u0633\u067e\u0627\u0633\u06af\u0632\u0627\u0631\u0645\u060c \u0648 \u0627\u06a9\u0646\u0648\u0646 \u0646\u0648\u0628\u062a \u0645\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0645\u0646 \u06a9\u0645\u06a9 \u06a9\u0646\u0645.  \u0645\u0646 \u0627\u0632 \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0648 \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06af\u0630\u0627\u0631\u06cc \u062a\u062c\u0631\u0628\u06cc\u0627\u062a\u0645 \u0644\u0630\u062a \u0628\u0631\u062f\u0645 \u0648 \u0627\u0645\u06cc\u062f\u0648\u0627\u0631\u0645 \u0628\u0631\u0627\u06cc \u0634\u0645\u0627 \u0645\u0641\u06cc\u062f \u0628\u0627\u0634\u062f.<\/p>\n<p>\u0627\u06af\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0631\u0627 \u062f\u0648\u0633\u062a \u062f\u0627\u0634\u062a\u06cc\u062f \u0648 \u0641\u06a9\u0631 \u0645\u06cc \u06a9\u0646\u06cc\u062f \u0627\u06cc\u0646 \u0628\u0647 \u062f\u06cc\u06af\u0631\u0627\u0646 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0628\u06af\u0630\u0627\u0631\u06cc\u062f.  \u0627\u06af\u0631 \u0627\u062d\u0633\u0627\u0633 \u0645\u06cc \u06a9\u0646\u06cc\u062f \u0686\u06cc\u0632\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647\u0628\u0648\u062f \u06cc\u0627\u0628\u062f \u06cc\u0627 \u0627\u0636\u0627\u0641\u0647 \u0634\u0648\u062f\u060c \u06a9\u0627\u0645\u0646\u062a \u06a9\u0646\u06cc\u062f.<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0647\u062f\u0641 \u0645\u0642\u0627\u0644\u0647 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0627\u0631\u0627\u0626\u0647 \u062c\u0632\u0626\u06cc\u0627\u062a \u062f\u0631 \u0645\u0648\u0631\u062f \u0686\u0627\u0631\u0686\u0648\u0628\u060c \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u0648 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0647\u0627\u06cc \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0634\u062f\u0647 \u0628\u0631\u0627\u06cc \u0645\u062e\u0632\u0646 github \u0627\u0633\u062a Azure Function Node.js Typescript Starter and Boilerplate \u062f\u0631 https:\/\/github.com\/safwanmasarik\/Azure-Function-Boilerplate-Api. \u0646\u06a9\u0627\u062a \u0645\u0647\u0645 \u0627\u06cc\u0646 \u062f\u06cc\u06af \u0628\u062e\u0627\u0631: \u26a1\ufe0f \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u062a\u0627\u06cc\u067e \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062a\u0627\u0628\u0639 Azure \u2668\ufe0f \u0642\u0627\u0628\u0644\u06cc\u062a \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0645\u062c\u062f\u062f \u062f\u0627\u063a &#8211; \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062f\u0631 \u0630\u062e\u06cc\u0631\u0647 \u0648 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc &hellip;<\/p>\n","protected":false},"author":2,"featured_media":9412,"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-9411","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\/9411","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=9411"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/9411\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/9412"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=9411"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=9411"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=9411"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}