{"id":97595,"date":"2025-02-15T13:40:41","date_gmt":"2025-02-15T10:10:41","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/%d8%aa%d9%88%d9%84%db%8c%d8%af-%d9%85%d8%b3%d8%aa%d9%86%d8%af-openapi-%da%a9%d9%84%d8%a7%d9%86-%d8%8c-%da%a9%d8%a7%d9%85%d9%84%d8%a7%d9%8b-%db%8c%da%a9%d9%be%d8%a7%d8%b1%da%86%d9%87-%d8%af%d8%b1\/"},"modified":"2025-02-15T13:40:41","modified_gmt":"2025-02-15T10:10:41","slug":"%d8%aa%d9%88%d9%84%db%8c%d8%af-%d9%85%d8%b3%d8%aa%d9%86%d8%af-openapi-%da%a9%d9%84%d8%a7%d9%86-%d8%8c-%da%a9%d8%a7%d9%85%d9%84%d8%a7%d9%8b-%db%8c%da%a9%d9%be%d8%a7%d8%b1%da%86%d9%87-%d8%af%d8%b1","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/%d8%aa%d9%88%d9%84%db%8c%d8%af-%d9%85%d8%b3%d8%aa%d9%86%d8%af-openapi-%da%a9%d9%84%d8%a7%d9%86-%d8%8c-%da%a9%d8%a7%d9%85%d9%84%d8%a7%d9%8b-%db%8c%da%a9%d9%be%d8%a7%d8%b1%da%86%d9%87-%d8%af%d8%b1\/","title":{"rendered":"\u062a\u0648\u0644\u06cc\u062f \u0645\u0633\u062a\u0646\u062f OpenAPI \u06a9\u0644\u0627\u0646 \u060c \u06a9\u0627\u0645\u0644\u0627\u064b \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u062f\u0631 \u0632\u0646\u06af \u0632\u062f\u06af\u06cc \u0628\u0627 Ohkami"},"content":{"rendered":"<div data-article-id=\"2280464\" id=\"article-body\" wp_automatic_readability=\"239.36997924\">\n<p><em>\u0627\u06cc\u0646 \u06cc\u06a9 \u067e\u0633\u062a \u0645\u062a\u0642\u0627\u0637\u0639 \u0627\u0632 \u0631\u0633\u0627\u0646\u0647 \u0627\u0633\u062a.<\/em><\/p>\n<p>\u062f\u0631 Rust Web Dev \u060c Utoipa \u0645\u062d\u0628\u0648\u0628 \u062a\u0631\u06cc\u0646 \u062c\u0639\u0628\u0647 \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0633\u0646\u062f OpenAPI \u0627\u0632 \u06a9\u062f \u0633\u0631\u0648\u0631 \u0627\u0633\u062a. \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0627\u06cc\u0646 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0639\u0627\u0644\u06cc \u0627\u0633\u062a \u060c \u0628\u0647 \u062f\u0644\u06cc\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u06cc\u0634 \u0627\u0632 \u062d\u062f \u0645\u0627\u06a9\u0631\u0648 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0646\u0627\u0627\u0645\u06cc\u062f \u06a9\u0646\u0646\u062f\u0647 \u0628\u0627\u0634\u062f.<\/p>\n<p>\u06cc\u06a9 \u0686\u0627\u0631\u0686\u0648\u0628 \u0648\u0628 \u062c\u062f\u06cc\u062f OHKAMI \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f <em><strong>\u06a9\u0644\u0627\u0646 \u06a9\u0645\u062a\u0631 \u060c \u0628\u0633\u06cc\u0627\u0631 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647<\/strong><\/em>  \u0631\u0627\u0647\u06cc \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0633\u0646\u062f OpenAPI \u0628\u0627 \u0622\u0646 <code>openapi<\/code> \u0648\u06cc\u0698\u06af\u06cc.<\/p>\n<div class=\"ltag-github-readme-tag\">\n<div class=\"readme-overview\">\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-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/%d8%aa%d9%88%d9%84%db%8c%d8%af-%d9%85%d8%b3%d8%aa%d9%86%d8%af-openapi-%da%a9%d9%84%d8%a7%d9%86-%d8%8c-%da%a9%d8%a7%d9%85%d9%84%d8%a7%d9%8b-%db%8c%da%a9%d9%be%d8%a7%d8%b1%da%86%d9%87-%d8%af%d8%b1\/#Ohkami_%E2%80%93_%DA%86%D8%A7%D8%B1%DA%86%D9%88%D8%A8_%D9%88%D8%A8_%D8%B4%D9%87%D9%88%D8%AF%DB%8C_%D9%88_%D8%A7%D8%B9%D9%84%D8%A7%D9%85%DB%8C_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%B2%D9%86%DA%AF_%D8%B2%D8%AF%DA%AF%DB%8C\" >Ohkami &#8211; \u0686\u0627\u0631\u0686\u0648\u0628 \u0648\u0628 \u0634\u0647\u0648\u062f\u06cc \u0648 \u0627\u0639\u0644\u0627\u0645\u06cc \u0628\u0631\u0627\u06cc \u0632\u0646\u06af \u0632\u062f\u06af\u06cc<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/%d8%aa%d9%88%d9%84%db%8c%d8%af-%d9%85%d8%b3%d8%aa%d9%86%d8%af-openapi-%da%a9%d9%84%d8%a7%d9%86-%d8%8c-%da%a9%d8%a7%d9%85%d9%84%d8%a7%d9%8b-%db%8c%da%a9%d9%be%d8%a7%d8%b1%da%86%d9%87-%d8%af%d8%b1\/#%D8%B4%D8%B1%D9%88%D8%B9_%D8%B3%D8%B1%DB%8C%D8%B9\" >\u0634\u0631\u0648\u0639 \u0633\u0631\u06cc\u0639<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/%d8%aa%d9%88%d9%84%db%8c%d8%af-%d9%85%d8%b3%d8%aa%d9%86%d8%af-openapi-%da%a9%d9%84%d8%a7%d9%86-%d8%8c-%da%a9%d8%a7%d9%85%d9%84%d8%a7%d9%8b-%db%8c%da%a9%d9%be%d8%a7%d8%b1%da%86%d9%87-%d8%af%d8%b1\/#%D9%86%D9%85%D9%88%D9%86%D9%87\" >\u0646\u0645\u0648\u0646\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\/%d8%aa%d9%88%d9%84%db%8c%d8%af-%d9%85%d8%b3%d8%aa%d9%86%d8%af-openapi-%da%a9%d9%84%d8%a7%d9%86-%d8%8c-%da%a9%d8%a7%d9%85%d9%84%d8%a7%d9%8b-%db%8c%da%a9%d9%be%d8%a7%d8%b1%da%86%d9%87-%d8%af%d8%b1\/#%DA%86%DA%AF%D9%88%D9%86%D9%87_%DA%A9%D8%A7%D8%B1_%D9%85%DB%8C_%DA%A9%D9%86%D8%AF%D8%9F\" >\u0686\u06af\u0648\u0646\u0647 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f\u061f<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/%d8%aa%d9%88%d9%84%db%8c%d8%af-%d9%85%d8%b3%d8%aa%d9%86%d8%af-openapi-%da%a9%d9%84%d8%a7%d9%86-%d8%8c-%da%a9%d8%a7%d9%85%d9%84%d8%a7%d9%8b-%db%8c%da%a9%d9%be%d8%a7%d8%b1%da%86%d9%87-%d8%af%d8%b1\/#1_Schema\" >1 Schema<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/%d8%aa%d9%88%d9%84%db%8c%d8%af-%d9%85%d8%b3%d8%aa%d9%86%d8%af-openapi-%da%a9%d9%84%d8%a7%d9%86-%d8%8c-%da%a9%d8%a7%d9%85%d9%84%d8%a7%d9%8b-%db%8c%da%a9%d9%be%d8%a7%d8%b1%da%86%d9%87-%d8%af%d8%b1\/#2_openapi_%D9%82%D9%84%D8%A7%D8%A8_FromParam%D8%A8%D8%A7_FromRequest%D8%A8%D8%A7_IntoResponse\" >2 openapi_* \u0642\u0644\u0627\u0628 FromParam\u0628\u0627 FromRequest\u0628\u0627 IntoResponse<\/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\/%d8%aa%d9%88%d9%84%db%8c%d8%af-%d9%85%d8%b3%d8%aa%d9%86%d8%af-openapi-%da%a9%d9%84%d8%a7%d9%86-%d8%8c-%da%a9%d8%a7%d9%85%d9%84%d8%a7%d9%8b-%db%8c%da%a9%d9%be%d8%a7%d8%b1%da%86%d9%87-%d8%af%d8%b1\/#3_routes_%D8%A7%D8%A8%D8%B1%D8%AF%D8%A7%D8%AF%D9%87_%D8%B1%D9%88%D8%AA%D8%B1\" >3 routes \u0627\u0628\u0631\u062f\u0627\u062f\u0647 \u0631\u0648\u062a\u0631<\/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\/%d8%aa%d9%88%d9%84%db%8c%d8%af-%d9%85%d8%b3%d8%aa%d9%86%d8%af-openapi-%da%a9%d9%84%d8%a7%d9%86-%d8%8c-%da%a9%d8%a7%d9%85%d9%84%d8%a7%d9%8b-%db%8c%da%a9%d9%be%d8%a7%d8%b1%da%86%d9%87-%d8%af%d8%b1\/#4_generate\" >4 generate<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/%d8%aa%d9%88%d9%84%db%8c%d8%af-%d9%85%d8%b3%d8%aa%d9%86%d8%af-openapi-%da%a9%d9%84%d8%a7%d9%86-%d8%8c-%da%a9%d8%a7%d9%85%d9%84%d8%a7%d9%8b-%db%8c%da%a9%d9%be%d8%a7%d8%b1%da%86%d9%87-%d8%af%d8%b1\/#%D9%BE%DB%8C%D9%88%D8%B3%D8%AA_%DA%A9%D8%A7%D8%B1%DA%AF%D8%B1%D8%A7%D9%86_CloudFlare\" >\u067e\u06cc\u0648\u0633\u062a: \u06a9\u0627\u0631\u06af\u0631\u0627\u0646 CloudFlare<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Ohkami_%E2%80%93_%DA%86%D8%A7%D8%B1%DA%86%D9%88%D8%A8_%D9%88%D8%A8_%D8%B4%D9%87%D9%88%D8%AF%DB%8C_%D9%88_%D8%A7%D8%B9%D9%84%D8%A7%D9%85%DB%8C_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%B2%D9%86%DA%AF_%D8%B2%D8%AF%DA%AF%DB%8C\"><\/span>\n<p>      Ohkami &#8211; \u0686\u0627\u0631\u0686\u0648\u0628 \u0648\u0628 \u0634\u0647\u0648\u062f\u06cc \u0648 \u0627\u0639\u0644\u0627\u0645\u06cc \u0628\u0631\u0627\u06cc \u0632\u0646\u06af \u0632\u062f\u06af\u06cc<br \/>\n    <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<\/p><\/div>\n<div class=\"ltag-github-body\">\n<div id=\"readme\" class=\"md\" data-path=\"README.md\">\n<article class=\"markdown-body entry-content container-lg\" itemprop=\"text\" wp_automatic_readability=\"29.317406143345\">\n<div align=\"center\" dir=\"auto\" wp_automatic_readability=\"7\">\n<p>    \u0627\u0648\u06a9\u0627\u0645\u06cc <em>\u062c\u062f\u06cc\u062f [\u72fc] \u06af\u0631\u06af \u0628\u0647 \u0632\u0628\u0627\u0646 \u0698\u0627\u067e\u0646\u06cc &#8211;<\/em> \u0686\u0627\u0631\u0686\u0648\u0628 \u0648\u0628 \u0628\u0635\u0631\u06cc \u0648 \u0627\u0639\u0644\u0627\u0645\u06cc \u0627\u0633\u062a\n<\/div>\n<p><\/p>\n<ul dir=\"auto\">\n<li>\n<em>\u0627\u0632 \u0646\u0638\u0631 \u06a9\u0644\u0627\u0646 \u06a9\u0645\u062a\u0631 \u0648 \u0627\u0632 \u0646\u0648\u0639 \u0627\u06cc\u0645\u0646<\/em> API \u0628\u0631\u0627\u06cc \u06a9\u062f \u0628\u0635\u0631\u06cc \u0648 \u0627\u0639\u0644\u0627\u0645\u06cc<\/li>\n<li>\n<em>\u0632\u0645\u0627\u0646 \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641<\/em> \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u0634\u0648\u0646\u062f<code>tokio<\/code>\u0628\u0627 <code>async-std<\/code>\u0628\u0627 <code>smol<\/code>\u0628\u0627 <code>nio<\/code>\u0628\u0627 <code>glommio<\/code> \u0648\u062a <code>worker<\/code> (\u06a9\u0627\u0631\u06af\u0631\u0627\u0646 CloudFlare) \u060c <code>lambda<\/code> (AWS Lambda)<\/li>\n<li>\u062a\u0633\u062a \u0628\u0633\u06cc\u0627\u0631 \u0633\u0631\u06cc\u0639 \u060c \u0628\u062f\u0648\u0646 \u0634\u0628\u06a9\u0647 \u060c \u0645\u06cc\u0627\u0646\u0647 \u0647\u0627\u06cc \u062e\u0648\u0628 \u0633\u0627\u062e\u062a\u0627\u0631 \u06cc\u0627\u0641\u062a\u0647 \u060c \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc \u0633\u0631\u0648\u0631-\u0633\u0631\u0648\u0631 \u060c WebSocket \u060c \u062a\u0648\u0644\u06cc\u062f \u0627\u0633\u0646\u0627\u062f OpenAPI \u0628\u0633\u06cc\u0627\u0631 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u060c &#8230;<\/li>\n<\/ul>\n<p><\/p>\n<h2 class=\"heading-element\" dir=\"auto\"><span class=\"ez-toc-section\" id=\"%D8%B4%D8%B1%D9%88%D8%B9_%D8%B3%D8%B1%DB%8C%D8%B9\"><\/span>\u0634\u0631\u0648\u0639 \u0633\u0631\u06cc\u0639<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ol dir=\"auto\">\n<li>\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 <code>dependencies<\/code> :<\/li>\n<\/ol>\n<div class=\"highlight highlight-source-toml notranslate position-relative overflow-auto js-code-highlight\" dir=\"auto\" data-snippet-clipboard-copy-content=\"[dependencies]&#10;ohkami = { version = \" features=\"[&quot;rt_tokio&quot;]\" tokio=\"{\" version=\"1\" wp_automatic_readability=\"10\">\n<pre>[<span class=\"pl-en\">dependencies<\/span>]\n<span class=\"pl-smi\">ohkami<\/span> = { <span class=\"pl-smi\">version<\/span> = <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>0.23<span class=\"pl-pds\">\"<\/span><\/span>, <span class=\"pl-smi\">features<\/span> = [<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>rt_tokio<span class=\"pl-pds\">\"<\/span><\/span>] }\n<span class=\"pl-smi\">tokio<\/span>  = { <span class=\"pl-smi\">version<\/span> = <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>1<span class=\"pl-pds\">\"<\/span><\/span>,    <span class=\"pl-smi\">features<\/span> = [<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>full<span class=\"pl-pds\">\"<\/span><\/span>] }<\/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>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\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<ol start=\"2\" dir=\"auto\">\n<li>\u0627\u0648\u0644\u06cc\u0646 \u06a9\u062f \u062e\u0648\u062f \u0631\u0627 \u0628\u0627 OHKAMI \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f: \u0645\u062b\u0627\u0644\/Quick_start\n<\/li>\n<\/ol>\n<div class=\"highlight highlight-source-rust notranslate position-relative overflow-auto js-code-highlight\" dir=\"auto\" data-snippet-clipboard-copy-content=\"use ohkami::prelude::*;&#10;use ohkami::typed::status;&#10;&#10;async fn health_check() -&gt; status::NoContent {&#10;    status::NoContent&#10;}&#10;&#10;async fn hello(name: &amp;str) -&gt; String {&#10;    format!(\" hello=\"\" async=\"\" fn=\"\" main=\"\" ohkami::new=\"\" .get=\"\" wp_automatic_readability=\"8\">\n<pre><span class=\"pl-k\">use<\/span> ohkami<span class=\"pl-kos\">::<\/span>prelude<span class=\"pl-kos\">::<\/span><span class=\"pl-c1\">*<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-k\">use<\/span> ohkami<span class=\"pl-kos\">::<\/span>typed<span class=\"pl-kos\">::<\/span>status<span class=\"pl-kos\">;<\/span>\n<span class=\"pl-k\">async<\/span> <span class=\"pl-k\">fn<\/span> <span class=\"pl-en\">health_check<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> -&gt; status<span class=\"pl-kos\">::<\/span><span class=\"pl-smi\">NoContent<\/span> <span class=\"pl-kos\">{<\/span>\n    status<span class=\"pl-kos\">::<\/span><span class=\"pl-v\">NoContent<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-k\">async<\/span> <span class=\"pl-k\">fn<\/span> <span class=\"pl-en\">hello<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">name<\/span><span class=\"pl-kos\">:<\/span> <span class=\"pl-c1\">&amp;<\/span><span class=\"pl-smi\">str<\/span><span class=\"pl-kos\">)<\/span> -&gt; <span class=\"pl-smi\">String<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-en\">format<\/span><\/pre>\n<p>\u2026<\/p>\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>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\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<\/article>\n<\/div><\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D9%85%D9%88%D9%86%D9%87\"><\/span>\n<p>  \u0646\u0645\u0648\u0646\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0646\u0645\u0648\u0646\u0647 \u0628\u06af\u06cc\u0631\u06cc\u0645. \u0627\u06cc\u0646 \u0647\u0645\u0627\u0646 \u0646\u0645\u0648\u0646\u0647 \u0627\u0632 \u0628\u062e\u0634 &#8220;OpenAPI&#8221; README \u0627\u0633\u062a \u060c \u0627\u0645\u0627 \u0628\u0627 \u0642\u0637\u0639\u0627\u062a \u0645\u0631\u062a\u0628\u0637 \u0628\u0627 OpenAPI \u062d\u0630\u0641 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"15\">\n<pre class=\"highlight rust\"><code><span class=\"k\">use<\/span> <span class=\"nn\">ohkami<\/span><span class=\"p\">::<\/span><span class=\"nn\">prelude<\/span><span class=\"p\">::<\/span><span class=\"o\">*<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">use<\/span> <span class=\"nn\">ohkami<\/span><span class=\"p\">::<\/span><span class=\"nn\">typed<\/span><span class=\"p\">::<\/span><span class=\"n\">status<\/span><span class=\"p\">;<\/span>\n\n<span class=\"nd\">#[derive(Deserialize)]<\/span>\n<span class=\"k\">struct<\/span> <span class=\"n\">CreateUser<\/span><span class=\"o\">&lt;<\/span><span class=\"nv\">'req<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"o\">&amp;<\/span><span class=\"nv\">'req<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"nd\">#[derive(Serialize)]<\/span>\n<span class=\"k\">struct<\/span> <span class=\"n\">User<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">usize<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">async<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">create_user<\/span><span class=\"p\">(<\/span>\n    <span class=\"nf\">JSON<\/span><span class=\"p\">(<\/span><span class=\"n\">CreateUser<\/span> <span class=\"p\">{<\/span> <span class=\"n\">name<\/span> <span class=\"p\">}):<\/span> <span class=\"n\">JSON<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">CreateUser<\/span><span class=\"o\">&lt;<\/span><span class=\"nv\">'_<\/span><span class=\"o\">&gt;&gt;<\/span>\n<span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nn\">status<\/span><span class=\"p\">::<\/span><span class=\"n\">Created<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">JSON<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">User<\/span><span class=\"o\">&gt;&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nn\">status<\/span><span class=\"p\">::<\/span><span class=\"nf\">Created<\/span><span class=\"p\">(<\/span><span class=\"nf\">JSON<\/span><span class=\"p\">(<\/span><span class=\"n\">User<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"mi\">42<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"n\">name<\/span><span class=\"nf\">.to_string<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">}))<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">async<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">list_users<\/span><span class=\"p\">()<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"n\">JSON<\/span><span class=\"o\">&lt;<\/span><span class=\"nb\">Vec<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">User<\/span><span class=\"o\">&gt;&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nf\">JSON<\/span><span class=\"p\">(<\/span><span class=\"nd\">vec!<\/span><span class=\"p\">[])<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"nd\">#[tokio::main]<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">let<\/span> <span class=\"n\">o<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">Ohkami<\/span><span class=\"p\">::<\/span><span class=\"nf\">new<\/span><span class=\"p\">((<\/span>\n        <span class=\"s\">\"\/users\"<\/span>\n            <span class=\"nf\">.GET<\/span><span class=\"p\">(<\/span><span class=\"n\">list_users<\/span><span class=\"p\">)<\/span>\n            <span class=\"nf\">.POST<\/span><span class=\"p\">(<\/span><span class=\"n\">create_user<\/span><span class=\"p\">),<\/span>\n    <span class=\"p\">));<\/span>\n\n    <span class=\"n\">o<\/span><span class=\"nf\">.howl<\/span><span class=\"p\">(<\/span><span class=\"s\">\"localhost:5000\"<\/span><span class=\"p\">)<\/span><span class=\"k\">.await<\/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>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0633\u0631\u0648\u0631 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f \u060c \u0641\u0639\u0627\u0644 \u0645\u06cc \u0634\u0648\u062f <code>openapi<\/code> \u0648\u06cc\u0698\u06af\u06cc \u0628\u0627\u0639\u062b \u062e\u0637\u0627\u06cc \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u0645\u06cc \u0634\u0648\u062f \u0648 \u0627\u06cc\u0646 \u0631\u0627 \u0628\u06cc\u0627\u0646 \u0645\u06cc \u06a9\u0646\u062f <code>User<\/code> \u0648\u062a <code>CreateUser<\/code> \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0646\u06a9\u0646\u06cc\u062f <code>ohkami::openapi::Schema<\/code>\u0628\u0634\u0631<\/p>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0648\u0631\u062f \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a \u060c \u0627\u0648\u06a9\u0627\u0645\u06cc \u0628\u0627 <code>openapi<\/code> \u0648\u06cc\u0698\u06af\u06cc \u0628\u0647 \u0637\u0648\u0631 \u0645\u0648\u062b\u0631\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0646\u0648\u0639 \u0631\u0627 \u06a9\u0646\u062a\u0631\u0644 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0628\u0647 \u0637\u0648\u0631 \u0647\u0648\u0634\u0645\u0646\u062f \u0627\u0628\u0631\u062f\u0627\u062f\u0647 \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0622\u0646 \u0631\u0627 \u062c\u0645\u0639 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u06a9\u062f \u0645\u0627\u0646\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"13\">\n<pre class=\"highlight rust\"><code><span class=\"k\">use<\/span> <span class=\"nn\">ohkami<\/span><span class=\"p\">::<\/span><span class=\"n\">openapi<\/span><span class=\"p\">;<\/span>\n\n<span class=\"o\">...<\/span>\n\n<span class=\"k\">let<\/span> <span class=\"n\">o<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">Ohkami<\/span><span class=\"p\">::<\/span><span class=\"nf\">new<\/span><span class=\"p\">((<\/span>\n    <span class=\"s\">\"\/users\"<\/span>\n        <span class=\"nf\">.GET<\/span><span class=\"p\">(<\/span><span class=\"n\">list_users<\/span><span class=\"p\">)<\/span>\n        <span class=\"nf\">.POST<\/span><span class=\"p\">(<\/span><span class=\"n\">create_user<\/span><span class=\"p\">),<\/span>\n<span class=\"p\">));<\/span>\n\n<span class=\"n\">o<\/span><span class=\"nf\">.generate<\/span><span class=\"p\">(<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"n\">OpenAPI<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">title<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"Users Server\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">version<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"0.1.0\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">servers<\/span><span class=\"p\">:<\/span> <span class=\"o\">&amp;<\/span><span class=\"p\">[<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nn\">Server<\/span><span class=\"p\">::<\/span><span class=\"nf\">at<\/span><span class=\"p\">(<\/span><span class=\"s\">\"localhost:5000\"<\/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>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\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\u0631\u0627\u06cc \u062c\u0645\u0639 \u0622\u0648\u0631\u06cc \u0627\u0628\u0631\u062f\u0627\u062f\u0647 \u062f\u0631 \u06cc\u06a9 \u0633\u0646\u062f OpenAPI \u0648 \u062e\u0631\u0648\u062c\u06cc \u0622\u0646 \u0628\u0647 \u06cc\u06a9 \u067e\u0631\u0648\u0646\u062f\u0647 <strong>\u0628\u062f\u0648\u0646 \u0645\u0627\u06a9\u0631\u0648\u0647\u0627\u06cc \u0645\u0627\u062a<\/strong>\u0628\u0634\u0631<\/p>\n<p>\u0633\u067e\u0633 \u060c \u0686\u06af\u0648\u0646\u0647 \u0645\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645 <code>Schema<\/code>\u061f \u062f\u0631 \u0648\u0627\u0642\u0639 \u0645\u0627 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 <code>impl Schema<\/code> \u0628\u0627 \u062f\u0633\u062a \u060c \u06cc\u0627 \u0641\u0642\u0637 <code>#[derive(Schema)]<\/code> \u0645\u0648\u062c\u0648\u062f \u0627\u0633\u062a! \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u060c \u0645\u0634\u062a\u0642 \u06a9\u0627\u0641\u06cc \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"13\">\n<pre class=\"highlight rust\"><code><span class=\"nd\">#[derive(Deserialize,<\/span> <span class=\"nd\">openapi::Schema)]<\/span> <span class=\"c1\">\/\/ &lt;--<\/span>\n<span class=\"k\">struct<\/span> <span class=\"n\">CreateUser<\/span><span class=\"o\">&lt;<\/span><span class=\"nv\">'req<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n   <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"o\">&amp;<\/span><span class=\"nv\">'req<\/span> <span class=\"nb\">str<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"nd\">#[derive(Serialize,<\/span> <span class=\"nd\">openapi::Schema)]<\/span> <span class=\"c1\">\/\/ &lt;--<\/span>\n<span class=\"k\">struct<\/span> <span class=\"n\">User<\/span> <span class=\"p\">{<\/span>\n   <span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">usize<\/span><span class=\"p\">,<\/span>\n   <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"nb\">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>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\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>\u0647\u0645\u06cc\u0646 \u0627\u0633\u062a! \u0641\u0642\u0637 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0627\u06cc\u0646 \u0645\u0634\u062a\u0642\u0627\u062a \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f <code>Ohkami::generate<\/code> \u0628\u0631\u0627\u06cc \u062e\u0631\u0648\u062c\u06cc \u067e\u0631\u0648\u0646\u062f\u0647 \u0632\u06cc\u0631:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"34\">\n<pre class=\"highlight json\"><code><span class=\"p\">{<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"openapi\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"3.1.0\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"info\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"title\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"Users Server\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"version\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"0.1.0\"<\/span><span class=\"w\">\n  <\/span><span class=\"p\">},<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"servers\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"w\">\n    <\/span><span class=\"p\">{<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"url\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"localhost:5000\"<\/span><span class=\"w\">\n    <\/span><span class=\"p\">}<\/span><span class=\"w\">\n  <\/span><span class=\"p\">],<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"paths\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"\/users\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"get\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n        <\/span><span class=\"nl\">\"operationId\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"list_users\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n        <\/span><span class=\"nl\">\"responses\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n          <\/span><span class=\"nl\">\"200\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n            <\/span><span class=\"nl\">\"description\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"OK\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n            <\/span><span class=\"nl\">\"content\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n              <\/span><span class=\"nl\">\"application\/json\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                <\/span><span class=\"nl\">\"schema\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                  <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"array\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n                  <\/span><span class=\"nl\">\"items\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                    <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"object\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n                    <\/span><span class=\"nl\">\"properties\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                      <\/span><span class=\"nl\">\"id\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                        <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"integer\"<\/span><span class=\"w\">\n                      <\/span><span class=\"p\">},<\/span><span class=\"w\">\n                      <\/span><span class=\"nl\">\"name\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                        <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"string\"<\/span><span class=\"w\">\n                      <\/span><span class=\"p\">}<\/span><span class=\"w\">\n                    <\/span><span class=\"p\">},<\/span><span class=\"w\">\n                    <\/span><span class=\"nl\">\"required\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"w\">\n                      <\/span><span class=\"s2\">\"id\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n                      <\/span><span class=\"s2\">\"name\"<\/span><span class=\"w\">\n                    <\/span><span class=\"p\">]<\/span><span class=\"w\">\n                  <\/span><span class=\"p\">}<\/span><span class=\"w\">\n                <\/span><span class=\"p\">}<\/span><span class=\"w\">\n              <\/span><span class=\"p\">}<\/span><span class=\"w\">\n            <\/span><span class=\"p\">}<\/span><span class=\"w\">\n          <\/span><span class=\"p\">}<\/span><span class=\"w\">\n        <\/span><span class=\"p\">}<\/span><span class=\"w\">\n      <\/span><span class=\"p\">},<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"post\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n        <\/span><span class=\"nl\">\"operationId\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"create_user\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n        <\/span><span class=\"nl\">\"requestBody\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n          <\/span><span class=\"nl\">\"required\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"kc\">true<\/span><span class=\"p\">,<\/span><span class=\"w\">\n          <\/span><span class=\"nl\">\"content\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n            <\/span><span class=\"nl\">\"application\/json\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n              <\/span><span class=\"nl\">\"schema\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"object\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n                <\/span><span class=\"nl\">\"properties\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                  <\/span><span class=\"nl\">\"id\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                    <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"integer\"<\/span><span class=\"w\">\n                  <\/span><span class=\"p\">},<\/span><span class=\"w\">\n                  <\/span><span class=\"nl\">\"name\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                    <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"string\"<\/span><span class=\"w\">\n                  <\/span><span class=\"p\">}<\/span><span class=\"w\">\n                <\/span><span class=\"p\">},<\/span><span class=\"w\">\n                <\/span><span class=\"nl\">\"required\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"w\">\n                  <\/span><span class=\"s2\">\"id\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n                  <\/span><span class=\"s2\">\"name\"<\/span><span class=\"w\">\n                <\/span><span class=\"p\">]<\/span><span class=\"w\">\n              <\/span><span class=\"p\">}<\/span><span class=\"w\">\n            <\/span><span class=\"p\">}<\/span><span class=\"w\">\n          <\/span><span class=\"p\">}<\/span><span class=\"w\">\n        <\/span><span class=\"p\">},<\/span><span class=\"w\">\n        <\/span><span class=\"nl\">\"responses\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n          <\/span><span class=\"nl\">\"201\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n            <\/span><span class=\"nl\">\"description\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"Created\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n            <\/span><span class=\"nl\">\"content\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n              <\/span><span class=\"nl\">\"application\/json\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                <\/span><span class=\"nl\">\"schema\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                  <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"object\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n                  <\/span><span class=\"nl\">\"properties\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                    <\/span><span class=\"nl\">\"id\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                      <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"integer\"<\/span><span class=\"w\">\n                    <\/span><span class=\"p\">},<\/span><span class=\"w\">\n                    <\/span><span class=\"nl\">\"name\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                      <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"string\"<\/span><span class=\"w\">\n                    <\/span><span class=\"p\">}<\/span><span class=\"w\">\n                  <\/span><span class=\"p\">},<\/span><span class=\"w\">\n                  <\/span><span class=\"nl\">\"required\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"w\">\n                    <\/span><span class=\"s2\">\"id\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n                    <\/span><span class=\"s2\">\"name\"<\/span><span class=\"w\">\n                  <\/span><span class=\"p\">]<\/span><span class=\"w\">\n                <\/span><span class=\"p\">}<\/span><span class=\"w\">\n              <\/span><span class=\"p\">}<\/span><span class=\"w\">\n            <\/span><span class=\"p\">}<\/span><span class=\"w\">\n          <\/span><span class=\"p\">}<\/span><span class=\"w\">\n        <\/span><span class=\"p\">}<\/span><span class=\"w\">\n      <\/span><span class=\"p\">}<\/span><span class=\"w\">\n    <\/span><span class=\"p\">}<\/span><span class=\"w\">\n  <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/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>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\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>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646 \u060c \u062a\u0639\u0631\u06cc\u0641 \u0622\u0646 \u0622\u0633\u0627\u0646 \u0627\u0633\u062a <code>User<\/code> \u0637\u0631\u062d\u0648\u0627\u0631\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0645\u0624\u0644\u0641\u0647 \u0628\u0647 \u062c\u0627\u06cc \u06a9\u067e\u06cc \u06a9\u0631\u062f\u0646 \u0637\u0631\u062d\u0648\u0627\u0631\u0647 \u0647\u0627\u06cc \u062f\u0631\u0648\u0646 \u062e\u0637\u06cc.<br \/>\u062f\u0631 \u0645\u0634\u062a\u0642 \u060c \u0641\u0642\u0637 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f <code>#[openapi(component)]<\/code> \u0648\u06cc\u0698\u06af\u06cc \u06cc\u0627\u0648\u0631:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"11\">\n<pre class=\"highlight rust\"><code><span class=\"nd\">#[derive(Serialize,<\/span> <span class=\"nd\">openapi::Schema)]<\/span>\n<span class=\"nd\">#[openapi(component)]<\/span> <span class=\"c1\">\/\/ &lt;--<\/span>\n<span class=\"k\">struct<\/span> <span class=\"n\">User<\/span> <span class=\"p\">{<\/span>\n   <span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">usize<\/span><span class=\"p\">,<\/span>\n   <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"nb\">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>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\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\u06a9\u0646\u0648\u0646 \u062e\u0631\u0648\u062c\u06cc:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"31\">\n<pre class=\"highlight json\"><code><span class=\"p\">{<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"openapi\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"3.1.0\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"info\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"title\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"Users Server\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"version\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"0.1.0\"<\/span><span class=\"w\">\n  <\/span><span class=\"p\">},<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"servers\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"w\">\n    <\/span><span class=\"p\">{<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"url\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"localhost:5000\"<\/span><span class=\"w\">\n    <\/span><span class=\"p\">}<\/span><span class=\"w\">\n  <\/span><span class=\"p\">],<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"paths\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"\/users\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"get\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n        <\/span><span class=\"nl\">\"operationId\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"list_users\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n        <\/span><span class=\"nl\">\"responses\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n          <\/span><span class=\"nl\">\"200\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n            <\/span><span class=\"nl\">\"description\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"OK\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n            <\/span><span class=\"nl\">\"content\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n              <\/span><span class=\"nl\">\"application\/json\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                <\/span><span class=\"nl\">\"schema\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                  <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"array\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n                  <\/span><span class=\"nl\">\"items\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                    <\/span><span class=\"nl\">\"$ref\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"#\/components\/schemas\/User\"<\/span><span class=\"w\">\n                  <\/span><span class=\"p\">}<\/span><span class=\"w\">\n                <\/span><span class=\"p\">}<\/span><span class=\"w\">\n              <\/span><span class=\"p\">}<\/span><span class=\"w\">\n            <\/span><span class=\"p\">}<\/span><span class=\"w\">\n          <\/span><span class=\"p\">}<\/span><span class=\"w\">\n        <\/span><span class=\"p\">}<\/span><span class=\"w\">\n      <\/span><span class=\"p\">},<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"post\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n        <\/span><span class=\"nl\">\"operationId\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"create_user\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n        <\/span><span class=\"nl\">\"requestBody\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n          <\/span><span class=\"nl\">\"required\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"kc\">true<\/span><span class=\"p\">,<\/span><span class=\"w\">\n          <\/span><span class=\"nl\">\"content\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n            <\/span><span class=\"nl\">\"application\/json\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n              <\/span><span class=\"nl\">\"schema\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"object\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n                <\/span><span class=\"nl\">\"properties\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                  <\/span><span class=\"nl\">\"id\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                    <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"integer\"<\/span><span class=\"w\">\n                  <\/span><span class=\"p\">},<\/span><span class=\"w\">\n                  <\/span><span class=\"nl\">\"name\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                    <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"string\"<\/span><span class=\"w\">\n                  <\/span><span class=\"p\">}<\/span><span class=\"w\">\n                <\/span><span class=\"p\">},<\/span><span class=\"w\">\n                <\/span><span class=\"nl\">\"required\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"w\">\n                  <\/span><span class=\"s2\">\"id\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n                  <\/span><span class=\"s2\">\"name\"<\/span><span class=\"w\">\n                <\/span><span class=\"p\">]<\/span><span class=\"w\">\n              <\/span><span class=\"p\">}<\/span><span class=\"w\">\n            <\/span><span class=\"p\">}<\/span><span class=\"w\">\n          <\/span><span class=\"p\">}<\/span><span class=\"w\">\n        <\/span><span class=\"p\">},<\/span><span class=\"w\">\n        <\/span><span class=\"nl\">\"responses\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n          <\/span><span class=\"nl\">\"201\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n            <\/span><span class=\"nl\">\"description\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"Created\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n            <\/span><span class=\"nl\">\"content\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n              <\/span><span class=\"nl\">\"application\/json\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                <\/span><span class=\"nl\">\"schema\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                  <\/span><span class=\"nl\">\"$ref\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"#\/components\/schemas\/User\"<\/span><span class=\"w\">\n                <\/span><span class=\"p\">}<\/span><span class=\"w\">\n              <\/span><span class=\"p\">}<\/span><span class=\"w\">\n            <\/span><span class=\"p\">}<\/span><span class=\"w\">\n          <\/span><span class=\"p\">}<\/span><span class=\"w\">\n        <\/span><span class=\"p\">}<\/span><span class=\"w\">\n      <\/span><span class=\"p\">}<\/span><span class=\"w\">\n    <\/span><span class=\"p\">}<\/span><span class=\"w\">\n  <\/span><span class=\"p\">},<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"components\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"schemas\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"User\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n        <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"object\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n        <\/span><span class=\"nl\">\"properties\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n          <\/span><span class=\"nl\">\"id\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n            <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"integer\"<\/span><span class=\"w\">\n          <\/span><span class=\"p\">},<\/span><span class=\"w\">\n          <\/span><span class=\"nl\">\"name\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n            <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"string\"<\/span><span class=\"w\">\n          <\/span><span class=\"p\">}<\/span><span class=\"w\">\n        <\/span><span class=\"p\">},<\/span><span class=\"w\">\n        <\/span><span class=\"nl\">\"required\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">[<\/span><span class=\"w\">\n          <\/span><span class=\"s2\">\"id\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n          <\/span><span class=\"s2\">\"name\"<\/span><span class=\"w\">\n        <\/span><span class=\"p\">]<\/span><span class=\"w\">\n      <\/span><span class=\"p\">}<\/span><span class=\"w\">\n    <\/span><span class=\"p\">}<\/span><span class=\"w\">\n  <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/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>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0648\u062a <em><strong>\u062f\u0631 \u0635\u0648\u0631\u062a \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc<\/strong><\/em> <code>#[operation]<\/code>  \u0648\u06cc\u0698\u06af\u06cc \u0628\u0631\u0627\u06cc \u062a\u0646\u0638\u06cc\u0645 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0627\u0633\u062a <code>summary<\/code>\u0628\u0627 <code>description<\/code>\u060c \u0648 \u0646\u0627\u062f\u06cc\u062f\u0647 \u06af\u0631\u0641\u062a\u0646 <code>operationId<\/code> \u0648 \u0647\u0631 \u067e\u0627\u0633\u062e <code>description<\/code>:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"11\">\n<pre class=\"highlight rust\"><code><span class=\"nd\">#[openapi::operation(<\/span><span class=\"err\">{<\/span>\n    <span class=\"nd\">summary:<\/span> <span class=\"s\">\"...\"<\/span><span class=\"nd\">,<\/span>\n    <span class=\"mi\">200<\/span><span class=\"nd\">:<\/span> <span class=\"s\">\"List of all users\"<\/span><span class=\"nd\">,<\/span>\n<span class=\"err\">}<\/span><span class=\"nd\">)]<\/span>\n<span class=\"cd\">\/\/\/ This doc comment is used for the<\/span>\n<span class=\"cd\">\/\/\/ `description` field of OpenAPI document<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">list_users<\/span><span class=\"p\">()<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"n\">JSON<\/span><span class=\"o\">&lt;<\/span><span class=\"nb\">Vec<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">User<\/span><span class=\"o\">&gt;&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nf\">JSON<\/span><span class=\"p\">(<\/span><span class=\"nd\">vec!<\/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>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"15\">\n<pre class=\"highlight json\"><code><span class=\"p\">{<\/span><span class=\"w\">\n  <\/span><span class=\"err\">...<\/span><span class=\"w\">\n\n  <\/span><span class=\"nl\">\"paths\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"\/users\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n      <\/span><span class=\"nl\">\"get\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n        <\/span><span class=\"nl\">\"operationId\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"list_users\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n        <\/span><span class=\"nl\">\"summary\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"...\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n        <\/span><span class=\"nl\">\"description\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"This doc comment is used for the<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">`description` field of OpenAPI document\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n        <\/span><span class=\"nl\">\"responses\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n          <\/span><span class=\"nl\">\"200\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n            <\/span><span class=\"nl\">\"description\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"List of all users\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n            <\/span><span class=\"nl\">\"content\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n              <\/span><span class=\"nl\">\"application\/json\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                <\/span><span class=\"nl\">\"schema\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                  <\/span><span class=\"nl\">\"type\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"array\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n                  <\/span><span class=\"nl\">\"items\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n                    <\/span><span class=\"nl\">\"$ref\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"#\/components\/schemas\/User\"<\/span><span class=\"w\">\n\n  <\/span><span class=\"err\">...<\/span><span class=\"w\">\n<\/span><\/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>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%DA%86%DA%AF%D9%88%D9%86%D9%87_%DA%A9%D8%A7%D8%B1_%D9%85%DB%8C_%DA%A9%D9%86%D8%AF%D8%9F\"><\/span>\n<p>  \u0686\u06af\u0648\u0646\u0647 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f\u061f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0646\u06af\u0627\u0647\u06cc \u0628\u06cc\u0646\u062f\u0627\u0632\u06cc\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0627\u06cc\u0646 \u062a\u0648\u0644\u06cc\u062f \u0633\u0646\u062f \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f!<\/p>\n<h3><span class=\"ez-toc-section\" id=\"1_Schema\"><\/span>\n<p>  1 <code>Schema<\/code><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0648\u0644 \u060c <code>#[derive(Schema)]<\/code>S \u0628\u0647 \u0634\u0631\u062d \u0632\u06cc\u0631 \u06af\u0633\u062a\u0631\u0634 \u0645\u06cc \u06cc\u0627\u0628\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"14\">\n<pre class=\"highlight rust\"><code><span class=\"k\">impl<\/span><span class=\"o\">&lt;<\/span><span class=\"nv\">'req<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">::<\/span><span class=\"nn\">ohkami<\/span><span class=\"p\">::<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"n\">Schema<\/span> <span class=\"k\">for<\/span> <span class=\"n\">CreateUser<\/span><span class=\"o\">&lt;<\/span><span class=\"nv\">'req<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">fn<\/span> <span class=\"nf\">schema<\/span><span class=\"p\">()<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"k\">impl<\/span> \n<span class=\"nb\">Into<\/span><span class=\"o\">&lt;<\/span><span class=\"p\">::<\/span><span class=\"nn\">ohkami<\/span><span class=\"p\">::<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nn\">schema<\/span><span class=\"p\">::<\/span><span class=\"n\">SchemaRef<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"k\">let<\/span> <span class=\"k\">mut<\/span> <span class=\"n\">schema<\/span> <span class=\"o\">=<\/span> <span class=\"p\">::<\/span><span class=\"nn\">ohkami<\/span><span class=\"p\">::<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nf\">object<\/span><span class=\"p\">();<\/span>\n            <span class=\"n\">schema<\/span> <span class=\"o\">=<\/span> <span class=\"n\">schema<\/span>\n                <span class=\"nf\">.property<\/span><span class=\"p\">(<\/span>\n                    <span class=\"s\">\"name\"<\/span><span class=\"p\">,<\/span>\n                    <span class=\"p\">::<\/span><span class=\"nn\">ohkami<\/span><span class=\"p\">::<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nn\">schema<\/span><span class=\"p\">::<\/span><span class=\"nn\">Schema<\/span><span class=\"p\">::<\/span><span class=\"o\">&lt;<\/span>\n                        <span class=\"p\">::<\/span><span class=\"nn\">ohkami<\/span><span class=\"p\">::<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nn\">schema<\/span><span class=\"p\">::<\/span><span class=\"nn\">Type<\/span><span class=\"p\">::<\/span><span class=\"n\">any<\/span><span class=\"p\">,<\/span>\n                    <span class=\"o\">&gt;<\/span><span class=\"p\">::<\/span><span class=\"nf\">from<\/span><span class=\"p\">(<\/span>\n                        <span class=\"o\">&lt;&amp;<\/span><span class=\"nv\">'req<\/span> <span class=\"nb\">str<\/span> <span class=\"k\">as<\/span> <span class=\"p\">::<\/span><span class=\"nn\">ohkami<\/span><span class=\"p\">::<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"n\">Schema<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">::<\/span><span class=\"nf\">schema<\/span><span class=\"p\">()<\/span>\n                            <span class=\"nf\">.into<\/span><span class=\"p\">()<\/span>\n                            <span class=\"nf\">.into_inline<\/span><span class=\"p\">()<\/span>\n                            <span class=\"nf\">.unwrap<\/span><span class=\"p\">(),<\/span>\n                    <span class=\"p\">),<\/span>\n                <span class=\"p\">);<\/span>\n            <span class=\"n\">schema<\/span>\n        <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>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\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\u0631\u0627\u0628\u0631 \u0628\u0627<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"9\">\n<pre class=\"highlight rust\"><code><span class=\"k\">impl<\/span> <span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"n\">Schema<\/span> <span class=\"k\">for<\/span> <span class=\"n\">CreateUser<\/span><span class=\"o\">&lt;<\/span><span class=\"nv\">'_<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">fn<\/span> <span class=\"nf\">schema<\/span><span class=\"p\">()<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"k\">impl<\/span> <span class=\"nb\">Into<\/span><span class=\"o\">&lt;<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nn\">schema<\/span><span class=\"p\">::<\/span><span class=\"n\">SchemaRef<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n        <span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nf\">object<\/span><span class=\"p\">()<\/span>\n            <span class=\"nf\">.property<\/span><span class=\"p\">(<\/span><span class=\"s\">\"name\"<\/span><span class=\"p\">,<\/span> <span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nf\">string<\/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>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"20\">\n<pre class=\"highlight rust\"><code><span class=\"k\">impl<\/span> <span class=\"p\">::<\/span><span class=\"nn\">ohkami<\/span><span class=\"p\">::<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"n\">Schema<\/span> <span class=\"k\">for<\/span> <span class=\"n\">User<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">fn<\/span> <span class=\"nf\">schema<\/span><span class=\"p\">()<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"k\">impl<\/span> <span class=\"nb\">Into<\/span><span class=\"o\">&lt;<\/span><span class=\"p\">::<\/span><span class=\"nn\">ohkami<\/span><span class=\"p\">::<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nn\">schema<\/span><span class=\"p\">::<\/span><span class=\"n\">SchemaRef<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n        <span class=\"p\">::<\/span><span class=\"nn\">ohkami<\/span><span class=\"p\">::<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nf\">component<\/span><span class=\"p\">(<\/span>\n            <span class=\"s\">\"User\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"p\">{<\/span>\n                <span class=\"k\">let<\/span> <span class=\"k\">mut<\/span> <span class=\"n\">schema<\/span> <span class=\"o\">=<\/span> <span class=\"p\">::<\/span><span class=\"nn\">ohkami<\/span><span class=\"p\">::<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nf\">object<\/span><span class=\"p\">();<\/span>\n                <span class=\"n\">schema<\/span> <span class=\"o\">=<\/span> <span class=\"n\">schema<\/span>\n                    <span class=\"nf\">.property<\/span><span class=\"p\">(<\/span>\n                        <span class=\"s\">\"id\"<\/span><span class=\"p\">,<\/span>\n                        <span class=\"p\">::<\/span><span class=\"nn\">ohkami<\/span><span class=\"p\">::<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nn\">schema<\/span><span class=\"p\">::<\/span><span class=\"nn\">Schema<\/span><span class=\"p\">::<\/span><span class=\"o\">&lt;<\/span>\n                            <span class=\"p\">::<\/span><span class=\"nn\">ohkami<\/span><span class=\"p\">::<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nn\">schema<\/span><span class=\"p\">::<\/span><span class=\"nn\">Type<\/span><span class=\"p\">::<\/span><span class=\"n\">any<\/span><span class=\"p\">,<\/span>\n                        <span class=\"o\">&gt;<\/span><span class=\"p\">::<\/span><span class=\"nf\">from<\/span><span class=\"p\">(<\/span>\n                            <span class=\"o\">&lt;<\/span><span class=\"nb\">usize<\/span> <span class=\"k\">as<\/span> <span class=\"p\">::<\/span><span class=\"nn\">ohkami<\/span><span class=\"p\">::<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"n\">Schema<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">::<\/span><span class=\"nf\">schema<\/span><span class=\"p\">()<\/span>\n                                <span class=\"nf\">.into<\/span><span class=\"p\">()<\/span>\n                                <span class=\"nf\">.into_inline<\/span><span class=\"p\">()<\/span>\n                                <span class=\"nf\">.unwrap<\/span><span class=\"p\">(),<\/span>\n                        <span class=\"p\">),<\/span>\n                    <span class=\"p\">);<\/span>\n                <span class=\"n\">schema<\/span> <span class=\"o\">=<\/span> <span class=\"n\">schema<\/span>\n                    <span class=\"nf\">.property<\/span><span class=\"p\">(<\/span>\n                        <span class=\"s\">\"name\"<\/span><span class=\"p\">,<\/span>\n                        <span class=\"p\">::<\/span><span class=\"nn\">ohkami<\/span><span class=\"p\">::<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nn\">schema<\/span><span class=\"p\">::<\/span><span class=\"nn\">Schema<\/span><span class=\"p\">::<\/span><span class=\"o\">&lt;<\/span>\n                            <span class=\"p\">::<\/span><span class=\"nn\">ohkami<\/span><span class=\"p\">::<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nn\">schema<\/span><span class=\"p\">::<\/span><span class=\"nn\">Type<\/span><span class=\"p\">::<\/span><span class=\"n\">any<\/span><span class=\"p\">,<\/span>\n                        <span class=\"o\">&gt;<\/span><span class=\"p\">::<\/span><span class=\"nf\">from<\/span><span class=\"p\">(<\/span>\n                            <span class=\"o\">&lt;<\/span><span class=\"nb\">String<\/span> <span class=\"k\">as<\/span> <span class=\"p\">::<\/span><span class=\"nn\">ohkami<\/span><span class=\"p\">::<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"n\">Schema<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">::<\/span><span class=\"nf\">schema<\/span><span class=\"p\">()<\/span>\n                                <span class=\"nf\">.into<\/span><span class=\"p\">()<\/span>\n                                <span class=\"nf\">.into_inline<\/span><span class=\"p\">()<\/span>\n                                <span class=\"nf\">.unwrap<\/span><span class=\"p\">(),<\/span>\n                        <span class=\"p\">),<\/span>\n                    <span class=\"p\">);<\/span>\n                <span class=\"n\">schema<\/span>\n            <span class=\"p\">},<\/span>\n        <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>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\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\u0631\u0627\u0628\u0631 \u0628\u0627<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"12\">\n<pre class=\"highlight rust\"><code><span class=\"k\">impl<\/span> <span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"n\">Schema<\/span> <span class=\"k\">for<\/span> <span class=\"n\">User<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">fn<\/span> <span class=\"nf\">schema<\/span><span class=\"p\">()<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"k\">impl<\/span> <span class=\"nb\">Into<\/span><span class=\"o\">&lt;<\/span><span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nn\">schema<\/span><span class=\"p\">::<\/span><span class=\"n\">SchemaRef<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n        <span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nf\">component<\/span><span class=\"p\">(<\/span>\n            <span class=\"s\">\"User\"<\/span><span class=\"p\">,<\/span>\n            <span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nf\">object<\/span><span class=\"p\">()<\/span>\n                <span class=\"nf\">.property<\/span><span class=\"p\">(<\/span><span class=\"s\">\"id\"<\/span><span class=\"p\">,<\/span> <span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nf\">integer<\/span><span class=\"p\">())<\/span>\n                <span class=\"nf\">.property<\/span><span class=\"p\">(<\/span><span class=\"s\">\"name\"<\/span><span class=\"p\">,<\/span> <span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"nf\">string<\/span><span class=\"p\">())<\/span>\n        <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>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\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>DSL \u0633\u0627\u0632\u0645\u0627\u0646 \u06cc\u0627\u0641\u062a\u0647 \u0627\u0645\u06a9\u0627\u0646 \u067e\u0630\u06cc\u0631 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u0633\u062a\u06cc \u0645\u0634\u062e\u0635 \u0634\u0648\u062f.<\/p>\n<p><code>Schema<\/code>  \u0635\u0641\u062a \u0633\u0627\u062e\u062a\u0627\u0631 \u0631\u0627 \u0628\u0647 \u06cc\u06a9 \u0645\u0648\u0631\u062f \u0627\u0632 \u0646\u0648\u0639 \u0628\u0647 \u0646\u0627\u0645 \u067e\u06cc\u0648\u0646\u062f \u0645\u06cc \u062f\u0647\u062f <code>SchemaRef<\/code>\u0628\u0634\u0631<\/p>\n<h3><span class=\"ez-toc-section\" id=\"2_openapi_%D9%82%D9%84%D8%A7%D8%A8_FromParam%D8%A8%D8%A7_FromRequest%D8%A8%D8%A7_IntoResponse\"><\/span>\n<p>  2 <code>openapi_*<\/code> \u0642\u0644\u0627\u0628 <code>FromParam<\/code>\u0628\u0627 <code>FromRequest<\/code>\u0628\u0627 <code>IntoResponse<\/code><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0622\u0646\u0647\u0627 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0627\u0635\u0644\u06cc Ohkami \u062f\u0631 Handler Bound \u0638\u0627\u0647\u0631 \u0634\u062f\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"8\">\n<pre class=\"highlight rust\"><code><span class=\"k\">async<\/span> <span class=\"k\">fn<\/span><span class=\"p\">({<\/span><span class=\"n\">FromParam<\/span> <span class=\"n\">tuple<\/span><span class=\"p\">}<\/span><span class=\"o\">?<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span><span class=\"n\">FromRequest<\/span> <span class=\"n\">item<\/span><span class=\"p\">}<\/span><span class=\"o\">*<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"p\">{<\/span><span class=\"n\">IntoResponse<\/span> <span class=\"n\">item<\/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>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\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>\u06a9\u06cc <code>openapi<\/code> \u0648\u06cc\u0698\u06af\u06cc \u0641\u0639\u0627\u0644 \u0645\u06cc \u0634\u0648\u062f \u060c \u0622\u0646\u0647\u0627 \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646 \u0631\u0648\u0634\u0647\u0627\u06cc \u0632\u06cc\u0631 \u062f\u0627\u0631\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"8\">\n<pre class=\"highlight rust\"><code><span class=\"k\">fn<\/span> <span class=\"nf\">openapi_param<\/span><span class=\"p\">()<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"n\">Parameter<\/span>\n\n<span class=\"k\">fn<\/span> <span class=\"nf\">openapi_inbound<\/span><span class=\"p\">()<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"n\">Inbound<\/span>\n\n<span class=\"k\">fn<\/span> <span class=\"nf\">openapi_responses<\/span><span class=\"p\">()<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nn\">openapi<\/span><span class=\"p\">::<\/span><span class=\"n\">Responses<\/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>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\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>Ohkami \u0627\u06cc\u0646 \u0631\u0648\u0634 \u0647\u0627 \u0631\u0627 \u062f\u0631 <code>IntoHandler<\/code> \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0633\u0627\u0632\u06af\u0627\u0631 <code>openapi::Operation<\/code>\u060c \u0645\u0646\u0639\u06a9\u0633 \u06a9\u0646\u0646\u062f\u0647 \u0627\u0645\u0636\u0627\u06cc \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u0648\u0627\u0642\u0639\u06cc \u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u0646.<\/p>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646 \u060c Ohkami \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0637\u0631\u062d\u0648\u0627\u0631\u0647 \u0631\u0627 \u062f\u0631 \u0645\u0648\u0627\u0631\u062f \u0645\u0634\u062a\u0631\u06a9 \u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u0646 \u062a\u0628\u0644\u06cc\u063a \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u0641\u0642\u0637 \u0631\u0648\u06cc \u0627\u0646\u0648\u0627\u0639 \u0648 \u0637\u0631\u062d \u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u062a\u0645\u0631\u06a9\u0632 \u06a9\u0646\u0646\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"3_routes_%D8%A7%D8%A8%D8%B1%D8%AF%D8%A7%D8%AF%D9%87_%D8%B1%D9%88%D8%AA%D8%B1\"><\/span>\n<p>  3 <code>routes<\/code> \u0627\u0628\u0631\u062f\u0627\u062f\u0647 \u0631\u0648\u062a\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062f\u0631 \u0627\u0648\u06a9\u0627\u0645\u06cc \u060c \u0622\u0646\u0686\u0647 \u0646\u0627\u0645\u06cc\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f <code>router::base::Router<\/code> \u062f\u0627\u0634\u062a\u0646 <code>routes<\/code> \u0627\u0645\u0644\u0627\u06a9 \u06a9\u0647 \u062a\u0645\u0627\u0645 \u0645\u0633\u06cc\u0631\u0647\u0627\u06cc \u0645\u062a\u0639\u0644\u0642 \u0628\u0647 \u0646\u0645\u0648\u0646\u0647 Ohkami \u0631\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u06cc\u0646 \u062f\u0631 \u06a9\u0646\u0627\u0631 \u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a <code>router::final::Router<\/code> \u0627\u0632 <code>finalize<\/code> \u0645\u0631\u062d\u0644\u0647 \u060c \u0648 \u0628\u0631\u0627\u06cc \u062c\u0645\u0639 \u0622\u0648\u0631\u06cc \u0627\u0628\u0631\u062f\u0627\u062f\u0647 \u0627\u0632 \u062a\u0645\u0627\u0645 \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"4_generate\"><\/span>\n<p>  4 <code>generate<\/code><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0686\u0647 <code>Ohkami::generate<\/code> \u062e\u0648\u062f\u0634 \u0641\u0642\u0637 \u0633\u0631\u06cc\u0627\u0644 \u0633\u0627\u0632\u06cc \u06cc\u06a9 \u0645\u0648\u0631\u062f \u0627\u0632 \u0646\u0648\u0639 \u0627\u0633\u062a <code>openapi::document::Document<\/code> \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u067e\u0631\u0648\u0646\u062f\u0647 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f.<\/p>\n<p>\u062f\u0631 <code>openapi::document::Document<\/code> \u0645\u0648\u0631\u062f \u062a\u0648\u0633\u0637 \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u0627\u0633\u062a <code>gen_openapi_doc<\/code> \u0627\u0632 <code>router::final::Router<\/code>\u060c \u062e\u0644\u0627\u0635\u0647 \u0634\u062f\u0647 \u0628\u0647 \u0634\u0631\u062d \u0632\u06cc\u0631:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"25\">\n<pre class=\"highlight rust\"><code><span class=\"k\">let<\/span> <span class=\"k\">mut<\/span> <span class=\"n\">doc<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">Document<\/span><span class=\"p\">::<\/span><span class=\"nf\">new<\/span><span class=\"p\">(<\/span><span class=\"cm\">\/* ... *\/<\/span><span class=\"p\">);<\/span>\n\n<span class=\"k\">for<\/span> <span class=\"n\">route<\/span> <span class=\"k\">in<\/span> <span class=\"n\">routes<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">let<\/span> <span class=\"p\">(<\/span><span class=\"n\">openapi_path<\/span><span class=\"p\">,<\/span> <span class=\"n\">openapi_path_param_names<\/span><span class=\"p\">)<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span>\n        <span class=\"c1\">\/\/ \"\/api\/users\/:id\"<\/span>\n        <span class=\"c1\">\/\/ \u2193<\/span>\n        <span class=\"c1\">\/\/ (\"\/api\/users\/{id}\", [\"id\"])<\/span>\n    <span class=\"p\">};<\/span>\n\n    <span class=\"k\">let<\/span> <span class=\"k\">mut<\/span> <span class=\"n\">operations<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">Operations<\/span><span class=\"p\">::<\/span><span class=\"nf\">new<\/span><span class=\"p\">();<\/span>\n    <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"n\">openapi_method<\/span><span class=\"p\">,<\/span> <span class=\"n\">router<\/span><span class=\"p\">)<\/span> <span class=\"k\">in<\/span> <span class=\"p\">[<\/span>\n        <span class=\"p\">(<\/span><span class=\"s\">\"get\"<\/span><span class=\"p\">,<\/span>    <span class=\"o\">&amp;<\/span><span class=\"k\">self<\/span><span class=\"py\">.GET<\/span><span class=\"p\">),<\/span>\n        <span class=\"p\">(<\/span><span class=\"s\">\"put\"<\/span><span class=\"p\">,<\/span>    <span class=\"o\">&amp;<\/span><span class=\"k\">self<\/span><span class=\"py\">.PUT<\/span><span class=\"p\">),<\/span>\n        <span class=\"p\">(<\/span><span class=\"s\">\"post\"<\/span><span class=\"p\">,<\/span>   <span class=\"o\">&amp;<\/span><span class=\"k\">self<\/span><span class=\"py\">.POST<\/span><span class=\"p\">),<\/span>\n        <span class=\"p\">(<\/span><span class=\"s\">\"patch\"<\/span><span class=\"p\">,<\/span>  <span class=\"o\">&amp;<\/span><span class=\"k\">self<\/span><span class=\"py\">.PATCH<\/span><span class=\"p\">),<\/span>\n        <span class=\"p\">(<\/span><span class=\"s\">\"delete\"<\/span><span class=\"p\">,<\/span> <span class=\"o\">&amp;<\/span><span class=\"k\">self<\/span><span class=\"py\">.DELETE<\/span><span class=\"p\">),<\/span>\n    <span class=\"p\">]<\/span> <span class=\"p\">{<\/span>\n        <span class=\"c1\">\/\/ if an operation is registerred in a Node<\/span>\n        <span class=\"c1\">\/\/ at `route` of `router`,<\/span>\n        <span class=\"c1\">\/\/ perform a preprocess for it and<\/span>\n        <span class=\"c1\">\/\/ append it to `operations`<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">doc<\/span> <span class=\"o\">=<\/span> <span class=\"n\">doc<\/span><span class=\"nf\">.path<\/span><span class=\"p\">(<\/span><span class=\"n\">openapi_path<\/span><span class=\"p\">,<\/span> <span class=\"n\">operations<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"n\">doc<\/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>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\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\u06af\u0648\u0646\u0647 \u0627\u0633\u062a \u06a9\u0647 Ohkami \u0633\u0646\u062f OpenAPI \u0631\u0627 \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u06a9\u0646\u062f!<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%D9%88%D8%B3%D8%AA_%DA%A9%D8%A7%D8%B1%DA%AF%D8%B1%D8%A7%D9%86_CloudFlare\"><\/span>\n<p>  \u067e\u06cc\u0648\u0633\u062a: \u06a9\u0627\u0631\u06af\u0631\u0627\u0646 CloudFlare<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644 \u060c \u06cc\u06a9 \u0645\u0634\u06a9\u0644 \u062f\u0631 <code>rt_worker<\/code>\u060c \u06a9\u0627\u0631\u06af\u0631\u0627\u0646 CloudFlare: \u062c\u0627\u06cc\u06cc \u06a9\u0647 Ohkami \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 WASM \u0628\u0647 \u06a9\u0627\u0631\u06af\u0631\u0627\u0646 Miniflare \u06cc\u0627 CloudFlare \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u0645\u06cc \u0634\u0648\u062f \u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0641\u0642\u0637 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0633\u0646\u062f OpenAPI \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u062f\u0627\u062f\u0647 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u062f \u0648 \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0622\u0646 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0633\u06cc\u0633\u062a\u0645 \u0641\u0627\u06cc\u0644 \u0645\u062d\u0644\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u0646\u0648\u06cc\u0633\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u06a9\u0627\u0631 \u062f\u0631 \u0627\u06cc\u0646 \u0632\u0645\u06cc\u0646\u0647 \u060c Ohkami \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0647\u0627\u06cc \u0627\u0628\u0632\u0627\u0631 CLI\/Workers_openapi.js \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f. \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 \u060c \u0627\u06cc\u0646 \u062f\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f <code>package.json<\/code> \u0627\u0632 \u06a9\u0627\u0631\u06af\u0631\u0627\u0646 CloudFlare + \u0627\u0644\u06af\u0648\u06cc OpenAPI:<\/p>\n<div class=\"highlight js-code-highlight\" wp_automatic_readability=\"12\">\n<pre class=\"highlight json\"><code><span class=\"p\">{<\/span><span class=\"w\">\n    <\/span><span class=\"err\">...<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"scripts\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n     <\/span><span class=\"nl\">\"deploy\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"export OHKAMI_WORKER_DEV='' &amp;&amp; wrangler deploy\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n     <\/span><span class=\"nl\">\"dev\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"export OHKAMI_WORKER_DEV=1 &amp;&amp; wrangler dev\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n     <\/span><span class=\"nl\">\"openapi\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"node -e <\/span><span class=\"se\">\\\"<\/span><span class=\"s2\">$(curl -s https:\/\/raw.githubusercontent.com\/ohkami-rs\/ohkami\/refs\/heads\/main\/scripts\/workers_openapi.js)<\/span><span class=\"se\">\\\"<\/span><span class=\"s2\"> -- --features openapi\"<\/span><span class=\"w\">\n    <\/span><span class=\"p\">},<\/span><span class=\"w\">\n    <\/span><span class=\"err\">...<\/span><span class=\"w\">\n<\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/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>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u060c \u0641\u0642\u0637<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>npm run openapi\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>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0633\u0646\u062f OpenAPI \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u06a9\u0646\u062f!<\/p>\n<hr\/>\n<p>\u0627\u0632 \u062e\u0648\u0627\u0646\u062f\u0646 \u0634\u0645\u0627 \u0645\u062a\u0634\u06a9\u0631\u0645 \u0627\u06af\u0631 \u0628\u0647 Ohkami \u0639\u0644\u0627\u0642\u0647 \u062f\u0627\u0631\u06cc\u062f \u060c Repo GitHub \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0631\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f!<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0627\u06cc\u0646 \u06cc\u06a9 \u067e\u0633\u062a \u0645\u062a\u0642\u0627\u0637\u0639 \u0627\u0632 \u0631\u0633\u0627\u0646\u0647 \u0627\u0633\u062a. \u062f\u0631 Rust Web Dev \u060c Utoipa \u0645\u062d\u0628\u0648\u0628 \u062a\u0631\u06cc\u0646 \u062c\u0639\u0628\u0647 \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0633\u0646\u062f OpenAPI \u0627\u0632 \u06a9\u062f \u0633\u0631\u0648\u0631 \u0627\u0633\u062a. \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0627\u06cc\u0646 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0639\u0627\u0644\u06cc \u0627\u0633\u062a \u060c \u0628\u0647 \u062f\u0644\u06cc\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u06cc\u0634 \u0627\u0632 \u062d\u062f \u0645\u0627\u06a9\u0631\u0648 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0646\u0627\u0627\u0645\u06cc\u062f \u06a9\u0646\u0646\u062f\u0647 \u0628\u0627\u0634\u062f. \u06cc\u06a9 \u0686\u0627\u0631\u0686\u0648\u0628 \u0648\u0628 \u062c\u062f\u06cc\u062f OHKAMI \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0644\u0627\u0646 \u06a9\u0645\u062a\u0631 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":97596,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/media2.dev.to\/dynamic\/image\/width=1000,height=500,fit=cover,gravity=auto,format=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fauyejo121jqz4jcr9sp2.png","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-97595","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\/97595","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=97595"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/97595\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/97596"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=97595"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=97595"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=97595"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}