{"id":64675,"date":"2024-06-01T15:16:07","date_gmt":"2024-06-01T11:46:07","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/%f0%9f%9a%80-building-toy-rest-api-%d8%af%d8%b1-nestjs\/"},"modified":"2024-06-01T15:16:07","modified_gmt":"2024-06-01T11:46:07","slug":"%f0%9f%9a%80-building-toy-rest-api-%d8%af%d8%b1-nestjs","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/%f0%9f%9a%80-building-toy-rest-api-%d8%af%d8%b1-nestjs\/","title":{"rendered":"\ud83d\ude80 Building Toy: REST API \u062f\u0631 NestJS"},"content":{"rendered":"<p><\/p>\n<div data-article-id=\"1872883\" id=\"article-body\">\n<p>\u0647\u06cc \u0647\u0645\u0647!  \ud83d\udc4b<\/p>\n<p>\ud83e\udd14 \u062a\u0627 \u0628\u0647 \u062d\u0627\u0644 \u0628\u0647 \u0627\u06cc\u0646 \u0641\u06a9\u0631 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0628\u0627\u0637\u0646 \u0631\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0631\u062f\u061f  \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0627 NestJS \u0648 Node.js \u0627\u0648\u0644\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0631\u06cc \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645!<\/p>\n<p>\u0686\u0647 \u062f\u0631 \u0632\u0645\u06cc\u0646\u0647 \u062a\u0648\u0633\u0639\u0647 Backend \u062a\u0627\u0632\u0647 \u06a9\u0627\u0631 \u0628\u0627\u0634\u06cc\u062f \u06cc\u0627 \u0641\u0642\u0637 \u0645\u0647\u0627\u0631\u062a \u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u062a\u0642\u0648\u06cc\u062a \u06a9\u0646\u06cc\u062f\u060c \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u0628\u0631\u0627\u06cc \u0634\u0645\u0627 \u0639\u0627\u0644\u06cc \u0627\u0633\u062a.  \u0645\u0627 \u0628\u0627 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0635\u0644\u06cc To-Do \u0634\u0631\u0648\u0639 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u062d\u062a\u06cc Swagger \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0633\u062a\u0646\u062f\u0627\u062a API \u0632\u0646\u062f\u0647 \u0627\u062f\u063a\u0627\u0645 \u0645\u06cc \u06a9\u0646\u06cc\u0645.  \ud83d\udcdd<\/p>\n<p>\ud83d\udd27 <strong>\u0622\u0646\u0686\u0647 \u06cc\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u062f \u06af\u0631\u0641\u062a:<\/strong><\/p>\n<ul>\n<li>\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 NestJS \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 To-Do \u0627\u0635\u0644\u06cc \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f.<\/li>\n<li>Swagger \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0627\u0633\u0646\u0627\u062f API \u062a\u0639\u0627\u0645\u0644\u06cc \u0627\u062f\u063a\u0627\u0645 \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u0627\u0635\u0648\u0644 \u0627\u0648\u0644\u06cc\u0647 \u0641\u0631\u06cc\u0645\u0648\u0631\u06a9 \u0647\u0627\u06cc Node.js \u0648 NestJS \u0631\u0627 \u0628\u062f\u0627\u0646\u06cc\u062f.<\/li>\n<\/ul>\n<p>\ud83d\udca1 <strong>\u0686\u0631\u0627 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 Toy To-Do \u0628\u0633\u0627\u0632\u06cc\u0645\u061f<\/strong><br \/>\u0627\u06cc\u0646 \u06cc\u06a9 \u062a\u0645\u0631\u06cc\u0646 \u0641\u0648\u0642 \u0627\u0644\u0639\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc \u0645\u0628\u062a\u062f\u06cc\u0627\u0646\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0642\u0635\u062f \u062f\u0627\u0631\u0646\u062f \u062f\u0631 \u0645\u0648\u0631\u062f \u062a\u0648\u0633\u0639\u0647 backend \u06cc\u0627\u062f \u0628\u06af\u06cc\u0631\u0646\u062f.  \u0628\u0647 \u0639\u0644\u0627\u0648\u0647\u060c \u0627\u062f\u063a\u0627\u0645 Swagger \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u0631\u0627 \u0628\u0627 \u0627\u0633\u0646\u0627\u062f API \u062a\u0639\u0627\u0645\u0644\u06cc \u06a9\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0627\u0632 \u0645\u0631\u0648\u0631\u06af\u0631 \u0634\u0645\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0634\u0648\u062f\u060c \u0628\u0647\u0628\u0648\u062f \u0645\u06cc\u200c\u0628\u062e\u0634\u062f.<\/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 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/%f0%9f%9a%80-building-toy-rest-api-%d8%af%d8%b1-nestjs\/#%D8%B4%D8%B1%D9%88%D8%B9_%D8%B4%D8%AF%D9%86\" >\u0634\u0631\u0648\u0639 \u0634\u062f\u0646<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/%f0%9f%9a%80-building-toy-rest-api-%d8%af%d8%b1-nestjs\/#%D9%86%D8%B5%D8%A8_Nodejs_v2090\" >\u0646\u0635\u0628 Node.js v20.9.0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/%f0%9f%9a%80-building-toy-rest-api-%d8%af%d8%b1-nestjs\/#%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_%D9%BE%D8%B1%D9%88%DA%98%D9%87_NestJS\" >\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u0698\u0647 NestJS<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/%f0%9f%9a%80-building-toy-rest-api-%d8%af%d8%b1-nestjs\/#%D8%B3%D8%A7%D8%AE%D8%AA_%D8%A7%D9%BE%D9%84%DB%8C%DA%A9%DB%8C%D8%B4%D9%86\" >\u0633\u0627\u062e\u062a \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/%f0%9f%9a%80-building-toy-rest-api-%d8%af%d8%b1-nestjs\/#%D9%85%D8%B1%D8%AD%D9%84%D9%87_1_%D9%85%D8%AF%D9%84_To-Do_%D8%B1%D8%A7_%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0645\u0631\u062d\u0644\u0647 1: \u0645\u062f\u0644 To-Do \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/%f0%9f%9a%80-building-toy-rest-api-%d8%af%d8%b1-nestjs\/#%D9%85%D8%B1%D8%AD%D9%84%D9%87_2_%DB%8C%DA%A9_DTO_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0645\u0631\u062d\u0644\u0647 2: \u06cc\u06a9 DTO \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/%f0%9f%9a%80-building-toy-rest-api-%d8%af%d8%b1-nestjs\/#%D9%85%D8%B1%D8%AD%D9%84%D9%87_3_%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%D8%B3%D8%B1%D9%88%DB%8C%D8%B3\" >\u0645\u0631\u062d\u0644\u0647 3: \u0627\u062c\u0631\u0627\u06cc \u0633\u0631\u0648\u06cc\u0633<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/%f0%9f%9a%80-building-toy-rest-api-%d8%af%d8%b1-nestjs\/#%D9%85%D8%B1%D8%AD%D9%84%D9%87_4_%DA%A9%D9%86%D8%AA%D8%B1%D9%84%D8%B1_%D8%B1%D8%A7_%D9%BE%DB%8C%D8%A7%D8%AF%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0645\u0631\u062d\u0644\u0647 4: \u06a9\u0646\u062a\u0631\u0644\u0631 \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f<\/a><\/li><\/ul><\/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\/%f0%9f%9a%80-building-toy-rest-api-%d8%af%d8%b1-nestjs\/#%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86_%D8%A7%D8%B3%D9%86%D8%A7%D8%AF_Swagger\" >\u0627\u0641\u0632\u0648\u062f\u0646 \u0627\u0633\u0646\u0627\u062f Swagger<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/%f0%9f%9a%80-building-toy-rest-api-%d8%af%d8%b1-nestjs\/#%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87\" >\u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/%f0%9f%9a%80-building-toy-rest-api-%d8%af%d8%b1-nestjs\/#%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D8%B1%D8%AF%D9%86_%D8%AD%D8%A7%D8%B4%DB%8C%D9%87_%D9%86%D9%88%DB%8C%D8%B3%DB%8C_Swagger\" >\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc Swagger<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/nabfollower.com\/blog\/%f0%9f%9a%80-building-toy-rest-api-%d8%af%d8%b1-nestjs\/#%D9%85%D8%B1%D8%AD%D9%84%D9%87_5_%D8%AD%D8%A7%D8%B4%DB%8C%D9%87_%D9%86%D9%88%DB%8C%D8%B3%DB%8C_Swagger_%D8%B1%D8%A7_%D8%A8%D9%87_%D9%85%D8%AF%D9%84_To-Do_%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0645\u0631\u062d\u0644\u0647 5: \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc Swagger \u0631\u0627 \u0628\u0647 \u0645\u062f\u0644 To-Do \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/nabfollower.com\/blog\/%f0%9f%9a%80-building-toy-rest-api-%d8%af%d8%b1-nestjs\/#%D9%85%D8%B1%D8%AD%D9%84%D9%87_6_%D8%AD%D8%A7%D8%B4%DB%8C%D9%87_%D9%86%D9%88%DB%8C%D8%B3%DB%8C_Swagger_%D8%B1%D8%A7_%D8%A8%D9%87_DTO_%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0645\u0631\u062d\u0644\u0647 6: \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc Swagger \u0631\u0627 \u0628\u0647 DTO \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/nabfollower.com\/blog\/%f0%9f%9a%80-building-toy-rest-api-%d8%af%d8%b1-nestjs\/#%D9%85%D8%B1%D8%AD%D9%84%D9%87_7_%D8%AD%D8%A7%D8%B4%DB%8C%D9%87_%D9%86%D9%88%DB%8C%D8%B3%DB%8C_Swagger_%D8%B1%D8%A7_%D8%A8%D9%87_Controller_%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0645\u0631\u062d\u0644\u0647 7: \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc Swagger \u0631\u0627 \u0628\u0647 Controller \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/nabfollower.com\/blog\/%f0%9f%9a%80-building-toy-rest-api-%d8%af%d8%b1-nestjs\/#%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%D9%85%D8%AC%D8%AF%D8%AF_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D8%AF%D8%B1_%D8%B5%D9%88%D8%B1%D8%AA_%D8%AA%D9%88%D9%82%D9%81\" >\u0627\u062c\u0631\u0627\u06cc \u0645\u062c\u062f\u062f \u0628\u0631\u0646\u0627\u0645\u0647 (\u062f\u0631 \u0635\u0648\u0631\u062a \u062a\u0648\u0642\u0641)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/nabfollower.com\/blog\/%f0%9f%9a%80-building-toy-rest-api-%d8%af%d8%b1-nestjs\/#%DB%8C%D8%A7%D8%AF%D8%AF%D8%A7%D8%B4%D8%AA_%D9%87%D8%A7%DB%8C_%D8%B3%D8%B1%DB%8C%D8%B9_%D8%AF%D8%B1_%D9%85%D9%88%D8%B1%D8%AF_Swagger\" >\u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0647\u0627\u06cc \u0633\u0631\u06cc\u0639 \u062f\u0631 \u0645\u0648\u0631\u062f Swagger<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%B4%D8%B1%D9%88%D8%B9_%D8%B4%D8%AF%D9%86\"><\/span>\n<p>  \u0634\u0631\u0648\u0639 \u0634\u062f\u0646<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4><span class=\"ez-toc-section\" id=\"%D9%86%D8%B5%D8%A8_Nodejs_v2090\"><\/span>\n<p>  \u0646\u0635\u0628 Node.js v20.9.0<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0645\u0637\u0645\u0626\u0646 \u0634\u0648\u06cc\u062f \u06a9\u0647 \u0622\u062e\u0631\u06cc\u0646 \u0646\u0633\u062e\u0647 LTS Node.js \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 nvm \u0646\u0635\u0628 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>curl <span class=\"nt\">-o-<\/span> https:\/\/raw.githubusercontent.com\/nvm-sh\/nvm\/v0.39.7\/install.sh | bash\nnvm <span class=\"nb\">install <\/span>20.9.0\nnvm use 20.9.0\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<h4><span class=\"ez-toc-section\" id=\"%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_%D9%BE%D8%B1%D9%88%DA%98%D9%87_NestJS\"><\/span>\n<p>  \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u0698\u0647 NestJS<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p><strong>NestJS CLI \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f:<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>   npm i <span class=\"nt\">-g<\/span> @nestjs\/cli\n   nest new todo-app\n   <span class=\"nb\">cd <\/span>todo-app\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><strong>\u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0645\u0627\u0698\u0648\u0644 \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645:<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>   nest generate module todos\n   nest generate service todos\n   nest generate controller todos\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 \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0633\u0627\u062e\u062a\u0627\u0631 \u0627\u0635\u0644\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u0648\u0627\u0631\u062f To-Do \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%B3%D8%A7%D8%AE%D8%AA_%D8%A7%D9%BE%D9%84%DB%8C%DA%A9%DB%8C%D8%B4%D9%86\"><\/span>\n<p>  \u0633\u0627\u062e\u062a \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4><span class=\"ez-toc-section\" id=\"%D9%85%D8%B1%D8%AD%D9%84%D9%87_1_%D9%85%D8%AF%D9%84_To-Do_%D8%B1%D8%A7_%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0645\u0631\u062d\u0644\u0647 1: \u0645\u062f\u0644 To-Do \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 <code>todo.model.ts<\/code> \u062f\u0631 <code>src\/todos<\/code> \u067e\u0648\u0634\u0647:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"k\">export<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Todo<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nl\">id<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">;<\/span>\n  <span class=\"nl\">title<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">;<\/span>\n  <span class=\"nl\">description<\/span><span class=\"p\">?:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">;<\/span>\n  <span class=\"nl\">isCompleted<\/span><span class=\"p\">:<\/span> <span class=\"nx\">boolean<\/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<h4><span class=\"ez-toc-section\" id=\"%D9%85%D8%B1%D8%AD%D9%84%D9%87_2_%DB%8C%DA%A9_DTO_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0645\u0631\u062d\u0644\u0647 2: \u06cc\u06a9 DTO \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0633\u0627\u062e\u062a\u0627\u0631 \u0627\u06cc\u062c\u0627\u062f \u0645\u0648\u0627\u0631\u062f \u062c\u062f\u06cc\u062f To-Do \u0631\u0627 \u0628\u0627 \u0622\u0646 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f <code>create-todo.dto.ts<\/code>:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"k\">export<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">CreateTodoDto<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nl\">title<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">;<\/span>\n  <span class=\"nl\">description<\/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<h4><span class=\"ez-toc-section\" id=\"%D9%85%D8%B1%D8%AD%D9%84%D9%87_3_%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%D8%B3%D8%B1%D9%88%DB%8C%D8%B3\"><\/span>\n<p>  \u0645\u0631\u062d\u0644\u0647 3: \u0627\u062c\u0631\u0627\u06cc \u0633\u0631\u0648\u06cc\u0633<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u062e\u062f\u0645\u0627\u062a \u062f\u0631 NestJS \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631 \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f.  \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0634\u0645\u0627 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a <code>todos.service.ts<\/code>:<\/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\">Injectable<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@nestjs\/common<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Todo<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/todo.model<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">CreateTodoDto<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/create-todo.dto<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">v4<\/span> <span class=\"k\">as<\/span> <span class=\"nx\">uuidv4<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">uuid<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n\n<span class=\"p\">@<\/span><span class=\"nd\">Injectable<\/span><span class=\"p\">()<\/span>\n<span class=\"k\">export<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">TodosService<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">private<\/span> <span class=\"nx\">todos<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Todo<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[];<\/span>\n\n  <span class=\"nf\">findAll<\/span><span class=\"p\">():<\/span> <span class=\"nx\">Todo<\/span><span class=\"p\">[]<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"nf\">findOne<\/span><span class=\"p\">(<\/span><span class=\"nx\">id<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">):<\/span> <span class=\"nx\">Todo<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span><span class=\"p\">.<\/span><span class=\"nf\">find<\/span><span class=\"p\">(<\/span><span class=\"nx\">todo<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">todo<\/span><span class=\"p\">.<\/span><span class=\"nx\">id<\/span> <span class=\"o\">===<\/span> <span class=\"nx\">id<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"nf\">create<\/span><span class=\"p\">(<\/span><span class=\"nx\">createTodoDto<\/span><span class=\"p\">:<\/span> <span class=\"nx\">CreateTodoDto<\/span><span class=\"p\">):<\/span> <span class=\"nx\">Todo<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">todo<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Todo<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n      <span class=\"na\">id<\/span><span class=\"p\">:<\/span> <span class=\"nf\">uuidv4<\/span><span class=\"p\">(),<\/span>\n      <span class=\"na\">isCompleted<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span>\n      <span class=\"p\">...<\/span><span class=\"nx\">createTodoDto<\/span>\n    <span class=\"p\">};<\/span>\n    <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span><span class=\"p\">.<\/span><span class=\"nf\">push<\/span><span class=\"p\">(<\/span><span class=\"nx\">todo<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">return<\/span> <span class=\"nx\">todo<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"nf\">update<\/span><span class=\"p\">(<\/span><span class=\"nx\">id<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">,<\/span> <span class=\"nx\">updateTodoDto<\/span><span class=\"p\">:<\/span> <span class=\"nx\">CreateTodoDto<\/span><span class=\"p\">):<\/span> <span class=\"nx\">Todo<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">todo<\/span> <span class=\"o\">=<\/span> <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nf\">findOne<\/span><span class=\"p\">(<\/span><span class=\"nx\">id<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nx\">todo<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n      <span class=\"k\">return<\/span> <span class=\"kc\">null<\/span><span class=\"p\">;<\/span>\n    <span class=\"p\">}<\/span>\n    <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span> <span class=\"o\">=<\/span> <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span><span class=\"p\">.<\/span><span class=\"nf\">map<\/span><span class=\"p\">(<\/span><span class=\"nx\">t<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">t<\/span><span class=\"p\">.<\/span><span class=\"nx\">id<\/span> <span class=\"o\">===<\/span> <span class=\"nx\">id<\/span> <span class=\"p\">?<\/span> <span class=\"p\">{<\/span> <span class=\"p\">...<\/span><span class=\"nx\">t<\/span><span class=\"p\">,<\/span> <span class=\"p\">...<\/span><span class=\"nx\">updateTodoDto<\/span> <span class=\"p\">}<\/span> <span class=\"p\">:<\/span> <span class=\"nx\">t<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">return<\/span> <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nf\">findOne<\/span><span class=\"p\">(<\/span><span class=\"nx\">id<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"k\">delete<\/span><span class=\"p\">(<\/span><span class=\"nx\">id<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">):<\/span> <span class=\"nx\">boolean<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span> <span class=\"o\">=<\/span> <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span><span class=\"p\">.<\/span><span class=\"nf\">filter<\/span><span class=\"p\">(<\/span><span class=\"nx\">todo<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">todo<\/span><span class=\"p\">.<\/span><span class=\"nx\">id<\/span> <span class=\"o\">!==<\/span> <span class=\"nx\">id<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">return<\/span> <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todos<\/span><span class=\"p\">.<\/span><span class=\"nx\">length<\/span> <span class=\"o\">&lt;<\/span> <span class=\"nx\">initiallyLength<\/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<h4><span class=\"ez-toc-section\" id=\"%D9%85%D8%B1%D8%AD%D9%84%D9%87_4_%DA%A9%D9%86%D8%AA%D8%B1%D9%84%D8%B1_%D8%B1%D8%A7_%D9%BE%DB%8C%D8%A7%D8%AF%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0645\u0631\u062d\u0644\u0647 4: \u06a9\u0646\u062a\u0631\u0644\u0631 \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u06a9\u0646\u062a\u0631\u0644\u200c\u06a9\u0646\u0646\u062f\u0647\u200c\u0647\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\u06cc HTTP \u0648\u0631\u0648\u062f\u06cc \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f:<\/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\">Controller<\/span><span class=\"p\">,<\/span> <span class=\"nx\">Get<\/span><span class=\"p\">,<\/span> <span class=\"nx\">Post<\/span><span class=\"p\">,<\/span> <span class=\"nx\">Put<\/span><span class=\"p\">,<\/span> <span class=\"nx\">Delete<\/span><span class=\"p\">,<\/span> <span class=\"nx\">Body<\/span><span class=\"p\">,<\/span> <span class=\"nx\">Param<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@nestjs\/common<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">TodosService<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/todos.service<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Todo<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/todo.model<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">CreateTodoDto<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/create-todo.dto<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n\n<span class=\"p\">@<\/span><span class=\"nd\">Controller<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">todos<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">export<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">TodosController<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nf\">constructor<\/span><span class=\"p\">(<\/span><span class=\"k\">private<\/span> <span class=\"k\">readonly<\/span> <span class=\"nx\">todosService<\/span><span class=\"p\">:<\/span> <span class=\"nx\">TodosService<\/span><span class=\"p\">)<\/span> <span class=\"p\">{}<\/span>\n\n  <span class=\"p\">@<\/span><span class=\"nd\">Get<\/span><span class=\"p\">()<\/span>\n  <span class=\"nf\">findAll<\/span><span class=\"p\">():<\/span> <span class=\"nx\">Todo<\/span><span class=\"p\">[]<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todosService<\/span><span class=\"p\">.<\/span><span class=\"nf\">findAll<\/span><span class=\"p\">();<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"p\">@<\/span><span class=\"nd\">Post<\/span><span class=\"p\">()<\/span>\n  <span class=\"nf\">create<\/span><span class=\"p\">(@<\/span><span class=\"nd\">Body<\/span><span class=\"p\">()<\/span> <span class=\"nx\">createTodoDto<\/span><span class=\"p\">:<\/span> <span class=\"nx\">CreateTodoDto<\/span><span class=\"p\">):<\/span> <span class=\"nx\">Todo<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todosService<\/span><span class=\"p\">.<\/span><span class=\"nf\">create<\/span><span class=\"p\">(<\/span><span class=\"nx\">createTodoDto<\/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%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86_%D8%A7%D8%B3%D9%86%D8%A7%D8%AF_Swagger\"><\/span>\n<p>  \u0627\u0641\u0632\u0648\u062f\u0646 \u0627\u0633\u0646\u0627\u062f Swagger<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u062f\u063a\u0627\u0645 Swagger \u062f\u0631 NestJS \u0628\u0647 \u0644\u0637\u0641 \u0648\u062c\u0648\u062f \u0633\u0627\u062f\u0647 \u0627\u0633\u062a <code>@nestjs\/swagger<\/code> \u0645\u062f\u0648\u0644:<\/p>\n<p><strong>\u0645\u0627\u0698\u0648\u0644 Swagger \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f:<\/strong><\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>   npm <span class=\"nb\">install<\/span> @nestjs\/swagger swagger-ui-express\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><strong>Swagger \u0631\u0627 \u062f\u0631 \u0641\u0627\u06cc\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0635\u0644\u06cc \u062e\u0648\u062f \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f (<code>main.ts<\/code>):<\/strong><\/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\">SwaggerModule<\/span><span class=\"p\">,<\/span> <span class=\"nx\">DocumentBuilder<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@nestjs\/swagger<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n   <span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">AppModule<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/app.module<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n   <span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">NestFactory<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@nestjs\/core<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n\n   <span class=\"k\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">bootstrap<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n     <span class=\"kd\">const<\/span> <span class=\"nx\">app<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">NestFactory<\/span><span class=\"p\">.<\/span><span class=\"nf\">create<\/span><span class=\"p\">(<\/span><span class=\"nx\">AppModule<\/span><span class=\"p\">);<\/span>\n     <span class=\"kd\">const<\/span> <span class=\"nx\">config<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">DocumentBuilder<\/span><span class=\"p\">()<\/span>\n       <span class=\"p\">.<\/span><span class=\"nf\">setTitle<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">To-Do API<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span>\n       <span class=\"p\">.<\/span><span class=\"nf\">setDescription<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">The To-Do API description<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span>\n       <span class=\"p\">.<\/span><span class=\"nf\">setVersion<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">1.0<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span>\n       <span class=\"p\">.<\/span><span class=\"nf\">build<\/span><span class=\"p\">();<\/span>\n     <span class=\"kd\">const<\/span> <span class=\"nb\">document<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">SwaggerModule<\/span><span class=\"p\">.<\/span><span class=\"nf\">createDocument<\/span><span class=\"p\">(<\/span><span class=\"nx\">app<\/span><span class=\"p\">,<\/span> <span class=\"nx\">config<\/span><span class=\"p\">);<\/span>\n     <span class=\"nx\">SwaggerModule<\/span><span class=\"p\">.<\/span><span class=\"nf\">setup<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">api<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">app<\/span><span class=\"p\">,<\/span> <span class=\"nb\">document<\/span><span class=\"p\">);<\/span>\n\n     <span class=\"k\">await<\/span> <span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">listen<\/span><span class=\"p\">(<\/span><span class=\"mi\">3000<\/span><span class=\"p\">);<\/span>\n   <span class=\"p\">}<\/span>\n   <span class=\"nf\">bootstrap<\/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<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87\"><\/span>\n<p>  \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>npm run start:dev\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\u0627\u0632\u062f\u06cc\u062f \u06a9\u0646\u06cc\u062f <code>http:\/\/localhost:3000\/api<\/code> \u0628\u0631\u0627\u06cc \u0645\u0634\u0627\u0647\u062f\u0647 \u0627\u0633\u0646\u0627\u062f Swagger API \u062a\u0639\u0627\u0645\u0644\u06cc \u062e\u0648\u062f\u060c \u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc API \u062e\u0648\u062f \u0631\u0627 \u0646\u06cc\u0632 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D8%B1%D8%AF%D9%86_%D8%AD%D8%A7%D8%B4%DB%8C%D9%87_%D9%86%D9%88%DB%8C%D8%B3%DB%8C_Swagger\"><\/span>\n<p>  \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc Swagger<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4><span class=\"ez-toc-section\" id=\"%D9%85%D8%B1%D8%AD%D9%84%D9%87_5_%D8%AD%D8%A7%D8%B4%DB%8C%D9%87_%D9%86%D9%88%DB%8C%D8%B3%DB%8C_Swagger_%D8%B1%D8%A7_%D8%A8%D9%87_%D9%85%D8%AF%D9%84_To-Do_%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0645\u0631\u062d\u0644\u0647 5: \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc Swagger \u0631\u0627 \u0628\u0647 \u0645\u062f\u0644 To-Do \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0645\u062f\u0644 \u062f\u0627\u062f\u0647 \u062e\u0648\u062f \u0631\u0627 \u0628\u0627 \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc Swagger \u062a\u0642\u0648\u06cc\u062a \u06a9\u0646\u06cc\u062f.  a \u0631\u0627 \u0627\u0635\u0644\u0627\u062d \u06a9\u0646\u06cc\u062f <code>todo.model.ts<\/code>:<\/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\">ApiProperty<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@nestjs\/swagger<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n\n<span class=\"k\">export<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Todo<\/span> <span class=\"p\">{<\/span>\n  <span class=\"p\">@<\/span><span class=\"nd\">ApiProperty<\/span><span class=\"p\">({<\/span> <span class=\"na\">example<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">1<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"na\">description<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">Unique identifier of the todo<\/span><span class=\"dl\">'<\/span> <span class=\"p\">})<\/span>\n  <span class=\"nx\">id<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"p\">@<\/span><span class=\"nd\">ApiProperty<\/span><span class=\"p\">({<\/span> <span class=\"na\">example<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">Buy groceries<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"na\">description<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">Title of the todo<\/span><span class=\"dl\">'<\/span> <span class=\"p\">})<\/span>\n  <span class=\"nx\">title<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"p\">@<\/span><span class=\"nd\">ApiProperty<\/span><span class=\"p\">({<\/span> <span class=\"na\">example<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">Remember to buy milk and eggs<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"na\">description<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">Detailed description of the todo<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"na\">required<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span> <span class=\"p\">})<\/span>\n  <span class=\"nx\">description<\/span><span class=\"p\">?:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"p\">@<\/span><span class=\"nd\">ApiProperty<\/span><span class=\"p\">({<\/span> <span class=\"na\">example<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span> <span class=\"na\">description<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">Completion status of the todo<\/span><span class=\"dl\">'<\/span> <span class=\"p\">})<\/span>\n  <span class=\"nx\">isCompleted<\/span><span class=\"p\">:<\/span> <span class=\"nx\">boolean<\/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<h4><span class=\"ez-toc-section\" id=\"%D9%85%D8%B1%D8%AD%D9%84%D9%87_6_%D8%AD%D8%A7%D8%B4%DB%8C%D9%87_%D9%86%D9%88%DB%8C%D8%B3%DB%8C_Swagger_%D8%B1%D8%A7_%D8%A8%D9%87_DTO_%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0645\u0631\u062d\u0644\u0647 6: \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc Swagger \u0631\u0627 \u0628\u0647 DTO \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0631\u0627 <code>CreateTodoDto<\/code> \u0647\u0645\u0686\u0646\u06cc\u0646 \u0627\u0632 \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc Swagger \u0633\u0648\u062f \u0645\u06cc \u0628\u0631\u062f:<\/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\">ApiProperty<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@nestjs\/swagger<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n\n<span class=\"k\">export<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">CreateTodoDto<\/span> <span class=\"p\">{<\/span>\n  <span class=\"p\">@<\/span><span class=\"nd\">ApiProperty<\/span><span class=\"p\">({<\/span> <span class=\"na\">example<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">Buy groceries<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"na\">description<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">Title of the todo<\/span><span class=\"dl\">'<\/span> <span class=\"p\">})<\/span>\n  <span class=\"nx\">title<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"p\">@<\/span><span class=\"nd\">ApiProperty<\/span><span class=\"p\">({<\/span> <span class=\"na\">example<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">Remember to buy milk and eggs<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"na\">description<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">Detailed description of the todo<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"na\">required<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span> <span class=\"p\">})<\/span>\n  <span class=\"nx\">description<\/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<h4><span class=\"ez-toc-section\" id=\"%D9%85%D8%B1%D8%AD%D9%84%D9%87_7_%D8%AD%D8%A7%D8%B4%DB%8C%D9%87_%D9%86%D9%88%DB%8C%D8%B3%DB%8C_Swagger_%D8%B1%D8%A7_%D8%A8%D9%87_Controller_%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0645\u0631\u062d\u0644\u0647 7: \u062d\u0627\u0634\u06cc\u0647 \u0646\u0648\u06cc\u0633\u06cc Swagger \u0631\u0627 \u0628\u0647 Controller \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0646\u062a\u0631\u0644\u0631\u0647\u0627 \u0627\u0632 Swagger \u0628\u0631\u0627\u06cc \u0645\u0633\u062a\u0646\u062f\u0633\u0627\u0632\u06cc \u0645\u0633\u06cc\u0631\u0647\u0627\u06cc API \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0646\u062f:<\/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\">Controller<\/span><span class=\"p\">,<\/span> <span class=\"nx\">Get<\/span><span class=\"p\">,<\/span> <span class=\"nx\">Post<\/span><span class=\"p\">,<\/span> <span class=\"nx\">Put<\/span><span class=\"p\">,<\/span> <span class=\"nx\">Delete<\/span><span class=\"p\">,<\/span> <span class=\"nx\">Body<\/span><span class=\"p\">,<\/span> <span class=\"nx\">Param<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@nestjs\/common<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">TodosService<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/todos.service<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Todo<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/todo.model<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">CreateTodoDto<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">.\/create-todo.dto<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">ApiTags<\/span><span class=\"p\">,<\/span> <span class=\"nx\">ApiOperation<\/span><span class=\"p\">,<\/span> <span class=\"nx\">ApiResponse<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@nestjs\/swagger<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n\n<span class=\"p\">@<\/span><span class=\"nd\">ApiTags<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">todos<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">@<\/span><span class=\"nd\">Controller<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">todos<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">export<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">TodosController<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nf\">constructor<\/span><span class=\"p\">(<\/span><span class=\"k\">private<\/span> <span class=\"k\">readonly<\/span> <span class=\"nx\">todosService<\/span><span class=\"p\">:<\/span> <span class=\"nx\">TodosService<\/span><span class=\"p\">)<\/span> <span class=\"p\">{}<\/span>\n\n  <span class=\"p\">@<\/span><span class=\"nd\">Get<\/span><span class=\"p\">()<\/span>\n  <span class=\"p\">@<\/span><span class=\"nd\">ApiOperation<\/span><span class=\"p\">({<\/span> <span class=\"na\">summary<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">Retrieve all todos<\/span><span class=\"dl\">'<\/span> <span class=\"p\">})<\/span>\n  <span class=\"p\">@<\/span><span class=\"nd\">ApiResponse<\/span><span class=\"p\">({<\/span> <span class=\"na\">status<\/span><span class=\"p\">:<\/span> <span class=\"mi\">200<\/span><span class=\"p\">,<\/span> <span class=\"na\">description<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">List of todo items<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"na\">type<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span><span class=\"nx\">Todo<\/span><span class=\"p\">]<\/span> <span class=\"p\">})<\/span>\n  <span class=\"nf\">findAll<\/span><span class=\"p\">():<\/span> <span class=\"nx\">Todo<\/span><span class=\"p\">[]<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todosService<\/span><span class=\"p\">.<\/span><span class=\"nf\">findAll<\/span><span class=\"p\">();<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"p\">@<\/span><span class=\"nd\">Post<\/span><span class=\"p\">()<\/span>\n  <span class=\"p\">@<\/span><span class=\"nd\">ApiOperation<\/span><span class=\"p\">({<\/span> <span class=\"na\">summary<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">Create a new todo<\/span><span class=\"dl\">'<\/span> <span class=\"p\">})<\/span>\n  <span class=\"p\">@<\/span><span class=\"nd\">ApiResponse<\/span><span class=\"p\">({<\/span> <span class=\"na\">status<\/span><span class=\"p\">:<\/span> <span class=\"mi\">201<\/span><span class=\"p\">,<\/span> <span class=\"na\">description<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">The created todo<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"na\">type<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Todo<\/span> <span class=\"p\">})<\/span>\n  <span class=\"nf\">create<\/span><span class=\"p\">(@<\/span><span class=\"nd\">Body<\/span><span class=\"p\">()<\/span> <span class=\"nx\">createTodoDto<\/span><span class=\"p\">:<\/span> <span class=\"nx\">CreateTodoDto<\/span><span class=\"p\">):<\/span> <span class=\"nx\">Todo<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">todosService<\/span><span class=\"p\">.<\/span><span class=\"nf\">create<\/span><span class=\"p\">(<\/span><span class=\"nx\">createTodoDto<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"c1\">\/\/ Continue with other methods using similar Swagger annotations<\/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%A7%D8%AC%D8%B1%D8%A7%DB%8C_%D9%85%D8%AC%D8%AF%D8%AF_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D8%AF%D8%B1_%D8%B5%D9%88%D8%B1%D8%AA_%D8%AA%D9%88%D9%82%D9%81\"><\/span>\n<p>  \u0627\u062c\u0631\u0627\u06cc \u0645\u062c\u062f\u062f \u0628\u0631\u0646\u0627\u0645\u0647 (\u062f\u0631 \u0635\u0648\u0631\u062a \u062a\u0648\u0642\u0641)<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>npm run start:dev\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\u0627\u0632\u062f\u06cc\u062f \u06a9\u0646\u06cc\u062f <code>http:\/\/localhost:3000\/api<\/code> \u0628\u0631\u0627\u06cc \u0645\u0634\u0627\u0647\u062f\u0647 \u0627\u0633\u0646\u0627\u062f Swagger API \u062a\u0639\u0627\u0645\u0644\u06cc \u062e\u0648\u062f \u0628\u0627 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0645\u062f\u0644\u200c\u0647\u0627.<\/p>\n<p>\u06a9\u062f \u0646\u0648\u06cc\u0633\u06cc \u0645\u0628\u0627\u0631\u06a9 \ud83d\ude80<\/p>\n<hr\/>\n<h3><span class=\"ez-toc-section\" id=\"%DB%8C%D8%A7%D8%AF%D8%AF%D8%A7%D8%B4%D8%AA_%D9%87%D8%A7%DB%8C_%D8%B3%D8%B1%DB%8C%D8%B9_%D8%AF%D8%B1_%D9%85%D9%88%D8%B1%D8%AF_Swagger\"><\/span>\n<p>  \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0647\u0627\u06cc \u0633\u0631\u06cc\u0639 \u062f\u0631 \u0645\u0648\u0631\u062f Swagger<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><strong>\u0641\u062d\u0634 \u062f\u0627\u062f\u0646<\/strong> \u0627\u063a\u0644\u0628 \u062f\u0631 \u06a9\u0646\u0627\u0631 <strong>\u0645\u0634\u062e\u0635\u0627\u062a OpenAPI<\/strong>\u060c \u0627\u0645\u0627 \u062f\u0631\u06a9 \u062a\u0645\u0627\u06cc\u0632 \u0648 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u06cc\u0646 \u0622\u0646\u0647\u0627 \u0645\u0647\u0645 \u0627\u0633\u062a. <strong>\u0641\u062d\u0634 \u062f\u0627\u062f\u0646<\/strong>\u060c \u062f\u0631 \u0627\u0628\u062a\u062f\u0627 \u062a\u0631\u06a9\u06cc\u0628\u06cc \u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u0628\u0631\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc \u0648 \u0645\u0633\u062a\u0646\u062f\u0633\u0627\u0632\u06cc RESTful API\u0647\u0627\u060c \u062a\u06a9\u0627\u0645\u0644 \u06cc\u0627\u0641\u062a\u0647 \u0627\u0633\u062a \u062a\u0627 \u0627\u0631\u062a\u0628\u0627\u0637 \u0646\u0632\u062f\u06cc\u06a9\u06cc \u0628\u0627 \u0645\u0634\u062e\u0635\u0627\u062a OpenAPI \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f.<\/p>\n<div class=\"table-wrapper-paragraph\">\n<table>\n<thead>\n<tr>\n<th><strong>\u062f\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc<\/strong><\/th>\n<th><strong>\u0634\u0631\u062d<\/strong><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Swagger Tools<\/strong><\/td>\n<td>Swagger \u062f\u0631 \u0627\u0628\u062a\u062f\u0627 \u0634\u0627\u0645\u0644 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f Swagger UI\u060c Swagger Editor \u0648 Swagger Codegen \u0628\u0631\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc\u060c \u0645\u0633\u062a\u0646\u062f\u0633\u0627\u0632\u06cc \u0648 \u0645\u0635\u0631\u0641 RESTful API\u0647\u0627 \u0628\u0648\u062f.<\/td>\n<\/tr>\n<tr>\n<td><strong>\u0645\u0634\u062e\u0635\u0627\u062a OpenAPI<\/strong><\/td>\n<td>\u062f\u0631 \u0627\u0628\u062a\u062f\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 Swagger Specification \u0634\u0646\u0627\u062e\u062a\u0647 \u0645\u06cc\u200c\u0634\u062f\u060c \u0627\u06cc\u0646 \u06cc\u06a9 \u0642\u0627\u0644\u0628 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u0628\u0631\u0627\u06cc \u062a\u0648\u0635\u06cc\u0641 API\u0647\u0627\u06cc RESTful \u0627\u0633\u062a \u06a9\u0647 \u062a\u0639\u0627\u0645\u0644\u0627\u062a API \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f \u0634\u062f\u0647 \u0631\u0627 \u062a\u0633\u0647\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f.<\/td>\n<\/tr>\n<tr>\n<td><strong>\u0627\u0631\u062a\u0628\u0627\u0637<\/strong><\/td>\n<td>\u062f\u0631 \u0633\u0627\u0644 2015\u060c Swagger Specification \u062a\u0648\u0633\u0637 SmartBear Software \u0628\u0647 OpenAPI Initiative \u0627\u0647\u062f\u0627 \u0634\u062f \u0648 \u0628\u0647 OpenAPI Specification \u062a\u063a\u06cc\u06cc\u0631 \u0646\u0627\u0645 \u062f\u0627\u062f\u060c \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0627\u0628\u0632\u0627\u0631 Swagger \u0647\u0645\u0686\u0646\u0627\u0646 \u0627\u0632 \u0622\u0646 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0631\u062f.<\/td>\n<\/tr>\n<tr>\n<td><strong>\u0627\u0633\u062a\u0641\u0627\u062f\u0647<\/strong><\/td>\n<td>\u0627\u0645\u0631\u0648\u0632\u0647\u060c &#8220;Swagger&#8221; \u0627\u063a\u0644\u0628 \u0628\u0647 \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc\u06cc \u0627\u0634\u0627\u0631\u0647 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0627\u0632 \u0645\u0634\u062e\u0635\u0627\u062a OpenAPI \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u0646\u062f\u060c \u06a9\u0647 \u0628\u0647 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 API \u0647\u0627 \u0631\u0627 \u0628\u062f\u0648\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0622\u0646\u0647\u0627 \u062a\u062c\u0633\u0645 \u0648 \u062a\u0639\u0627\u0645\u0644 \u06a9\u0646\u0646\u062f.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>\ud83d\udd25 \u0627\u06af\u0631 \u0627\u0632 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0644\u0630\u062a \u0628\u0631\u062f\u06cc\u062f\u060c \u00ab\u0622\u062a\u0634\u00bb \u0631\u0627 \u0628\u0632\u0646\u06cc\u062f!<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0647\u06cc \u0647\u0645\u0647! \ud83d\udc4b \ud83e\udd14 \u062a\u0627 \u0628\u0647 \u062d\u0627\u0644 \u0628\u0647 \u0627\u06cc\u0646 \u0641\u06a9\u0631 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0628\u0627\u0637\u0646 \u0631\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0631\u062f\u061f \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0627 NestJS \u0648 Node.js \u0627\u0648\u0644\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0631\u06cc \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645! \u0686\u0647 \u062f\u0631 \u0632\u0645\u06cc\u0646\u0647 \u062a\u0648\u0633\u0639\u0647 Backend \u062a\u0627\u0632\u0647 \u06a9\u0627\u0631 \u0628\u0627\u0634\u06cc\u062f \u06cc\u0627 \u0641\u0642\u0637 \u0645\u0647\u0627\u0631\u062a \u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u062a\u0642\u0648\u06cc\u062a \u06a9\u0646\u06cc\u062f\u060c \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627 \u0628\u0631\u0627\u06cc \u0634\u0645\u0627 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":64676,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/media.dev.to\/cdn-cgi\/image\/width=1000,height=500,fit=cover,gravity=auto,format=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn1yt72fnvs5aoer8xye7.png","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-64675","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\/64675","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=64675"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/64675\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/64676"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=64675"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=64675"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=64675"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}