{"id":426556,"date":"2024-07-18T09:00:09","date_gmt":"2024-07-18T09:00:09","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=426556"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=426556","title":{"rendered":"<span>\u041a\u043e\u0433\u0434\u0430 \u0438\u043c\u0451\u043d \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. REST-\u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430 F#. \u0427\u0430\u0441\u0442\u044c 2. \u041c\u0435\u0442\u043e\u0434\u044b<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/l_\/4h\/46\/l_4h46btlozjuze_dhxhucg5hrm.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/l_\/4h\/46\/l_4h46btlozjuze_dhxhucg5hrm.jpeg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0412 <a href=\"https:\/\/habr.com\/ru\/companies\/first\/articles\/817261\/\">\u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a> \u043c\u044b \u043f\u0440\u043e\u0435\u0446\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u0432 DTO \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 REST. \u0412 \u044d\u0442\u043e\u0439 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0435\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u0432 \u043d\u0435\u0447\u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"fsharp\">let! issues = gitflic.project.[\"kleidemos\"].[\"myFirstProject\"].issue.GET(limit = 24) <\/code><\/pre>\n<p>\u0418\u043c\u0438\u0442\u0430\u0446\u0438\u044f \u043f\u0443\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441, \u043e\u0434\u043d\u0430\u043a\u043e \u0435\u0451 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0440\u044f\u0434 \u0441\u0430\u043c\u043e\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0445 \u0441\u0442\u0430\u0434\u0438\u0439.<\/p>\n<h3>\u041e\u0431\u044a\u0435\u043a\u0442\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0441\u0435\u0442\u0438<\/h3>\n<p>\u0412\u044b\u0437\u043e\u0432 <code>HttpClient<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0443\u043b\u044c\u043c\u0438\u043d\u0430\u0446\u0438\u0435\u0439 \u043c\u0435\u0442\u043e\u0434\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043d\u0438\u043c \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0441\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041c\u0435\u043d\u044f \u0442\u0430\u043a\u0430\u044f \u0441\u0432\u044f\u0437\u044c \u0443\u0433\u043d\u0435\u0442\u0430\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0438\u0437\u0431\u0435\u0433\u0430\u044e \u0435\u0451 \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0438 \u043c\u043e\u0433\u0443 \u0432\u043e\u0432\u0441\u0435 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0435\u0451 \u0432 \u043f\u0430\u043a\u0435\u0442. \u0410 \u0435\u0449\u0451 \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u043f\u043e\u0434\u0441\u0435\u043b \u043d\u0430 <code>Godot<\/code>, \u0430\u043d\u0434\u0440\u043e\u0438\u0434-\u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435 \u0434\u0430\u0451\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0441\u0435\u0442\u044c\u044e \u0432 \u043e\u0431\u0445\u043e\u0434 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0434\u0432\u0438\u0436\u043a\u0430. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u043b\u0430 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440 \u0434\u0430\u0436\u0435 \u043f\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u043a \u043c\u043e\u0435\u043c\u0443 \u043b\u0435\u0433\u0430\u0441\u0438.<\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0441\u0435\u0442\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043c\u0435\u0441\u0442\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u043a\u0438\u043c \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0430\u043a\u0442\u043e\u0440\u043e\u043c (\u0432 \u0448\u0438\u0440\u043e\u043a\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435). \u042d\u0442\u043e\u0442 \u0430\u043a\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0434\u0442\u0438 \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0435 \u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043e\u0431\u0432\u044f\u0437\u043a\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f <strong>\u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0433\u043b\u0443\u0431\u044c \u0430\u043a\u0442\u043e\u0440\u0430<\/strong>, \u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044e API \u0441\u043d\u0430\u0440\u0443\u0436\u0438. \u041a\u043e\u043c\u043f\u043b\u0435\u043a\u0441 \u0438\u0437 \u0430\u043a\u0442\u043e\u0440\u0430 \u0438 \u0435\u0433\u043e \u043e\u0431\u0432\u044f\u0437\u043a\u0438 \u044f \u043f\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u0431\u0443\u0434\u0443 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u043d\u043d\u0435\u0440\u043e\u043c, \u043d\u043e \u044d\u0442\u043e\u0442 \u043d\u0435\u0439\u043c\u0438\u043d\u0433 \u043d\u0435\u043b\u044c\u0437\u044f \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e. \u041e\u0431\u0440\u0430\u0449\u0430\u044e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0440\u0430\u043d\u043d\u0435\u0440\u0430, \u0430 \u043d\u0435 <code>HttpClient<\/code> \u0438\u043b\u0438 \u0430\u043a\u0442\u043e\u0440\u0430. \u0418 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0438 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"fsharp\">type 'output Request = { Url : string HttpMethod : string Content : string Headers : (string * string) list } <\/code><\/pre>\n<p><code>'output<\/code> \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043b\u0438\u0448\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0442\u0438\u043f. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u0440\u0435\u043a\u043e\u0440\u0434. \u041d\u043e \u043b\u0443\u0447\u0448\u0435 \u0432\u044b\u043a\u0438\u043d\u0443\u0442\u044c \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0438 <code>Content<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u0437-\u0437\u0430 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u043f\u043e\u043b\u0435\u0439 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u0430 \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u044f\u043d\u0443\u0442\u044c \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0442\u043e\u043d\u043d\u0443 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0438 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0435\u0433 \u043a \u043c\u043e\u0440\u044e. \u0420\u0430\u0437 \u043c\u044b \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0438\u0433\u0440\u043e\u043a\u043e\u043c, \u0442\u043e \u044d\u0442\u043e\u0442 \u0436\u0435 \u0438\u0433\u0440\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0437\u0430 [\u0434\u0435]\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e:<\/p>\n<pre><code class=\"fsharp\">type Request&lt;'input, 'output> = { Url : string HttpMethod : string Headers : (string * string) list Input : 'input } <\/code><\/pre>\n<p><s>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u043c\u043e\u043d\u0430\u0434\u0443, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c <\/s><code><s>zero<\/s><\/code><s>, <\/s><code><s>map<\/s><\/code><s> \u0438 \u0442. \u0434.<\/s><\/p>\n<p>\u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u043e, \u043d\u043e \u0434\u0430\u043b\u0435\u0435 \u043d\u0430\u0434\u043e \u0437\u0430\u0434\u0430\u0442\u044c\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c, \u0437\u0430\u0447\u0435\u043c \u0437\u0434\u0435\u0441\u044c <code>Input<\/code>. \u0418\u0437-\u0437\u0430 \u043d\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u0435\u0437 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u0438\u043f\u0430, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430\u0441 \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043d\u0438 \u043a\u0430\u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0438 \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439. \u0422\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u043d\u0438\u043c \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e \u0446\u0435\u043b\u044f\u043c \u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u044f\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0415\u0441\u043b\u0438 \u0432\u044b\u043a\u0438\u043d\u0443\u0442\u044c \u044d\u0442\u043e \u043f\u043e\u043b\u0435, \u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0432\u0445\u043e\u0434\u0435 \u0438 \u0432\u044b\u0445\u043e\u0434\u0435, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0440\u0430\u043d\u043d\u0435\u0440 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0441\u043c\u043e\u0436\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441:<\/p>\n<pre><code class=\"fsharp\">type Request&lt;'input, 'output> = { Url : string HttpMethod : string Headers : (string * string) list } <\/code><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/fk\/3d\/7k\/fk3d7kxo2amlrj0hbfahrt0wapm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/fk\/3d\/7k\/fk3d7kxo2amlrj0hbfahrt0wapm.png\"\/><\/figure>\n<p>\u041f\u043e \u0442\u0435\u043c \u0436\u0435 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0440\u0435\u0437\u0430\u0442\u044c <code>Url<\/code>, \u0438\u0431\u043e \u0435\u0441\u043b\u0438 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0434\u043e\u043c\u0435\u043d\u0430, \u043f\u043e\u0440\u0442 \u0438 \u0442. \u0434., \u0442\u043e \u0432\u0441\u044f \u044d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f <code>Request<\/code>. \u042d\u0442\u043e \u0441\u043d\u043e\u0432\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0431\u0435\u0437 \u043e\u0449\u0443\u0442\u0438\u043c\u043e\u0439 \u0434\u043b\u044f \u043d\u0430\u0441 \u043f\u043e\u043b\u044c\u0437\u044b. \u0414\u0430\u043d\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442\u044c \u0440\u0430\u043d\u043d\u0435\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442 \u0435\u0451 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u0443\u0442\u0451\u043c:<\/p>\n<pre><code class=\"fsharp\">type Request&lt;'input, 'output> = { Path : string HttpMethod : string Headers : (string * string) list } <\/code><\/pre>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u044f \u0432\u043e\u043b\u0435\u043d \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c <code>Query<\/code>-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437 <code>Path<\/code>. \u0421\u043b\u0438\u0442\u044c \u0438\u0445 \u0432\u043e\u0435\u0434\u0438\u043d\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442, \u0430 \u0432\u043e\u0442 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u0438\u0445 \u043e\u0442\u0442\u0443\u0434\u0430 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441 \u0431\u0443\u0431\u043d\u043e\u043c:<\/p>\n<pre><code class=\"fsharp\">type Request&lt;'input, 'output> = { Path : string Query : (string * string) list HttpMethod : string Headers : (string * string) list } with member this.PathAndQuery : string = ... <\/code><\/pre>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043a\u043e\u0433\u043e-\u0442\u043e \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442, \u043f\u043e\u0447\u0435\u043c\u0443 <code>Query<\/code> \u0438 <code>Headers<\/code> \u0431\u044b\u043b\u0438 \u0437\u0430\u0434\u0430\u043d\u044b \u0441\u043f\u0438\u0441\u043a\u043e\u043c, \u0430 \u043d\u0435 <code>Map<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u043b \u0431\u044b \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u0443\u044e \u0437\u0430\u0449\u0438\u0442\u0443 \u043e\u0442 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432, \u0431\u044b\u0442\u044c \u043c\u043e\u0436\u0435\u0442, \u0443\u0441\u043a\u043e\u0440\u0438\u043b \u043f\u043e\u0438\u0441\u043a \u0438 \u0442. \u0434. \u042d\u0442\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0448\u0430\u0433, \u0435\u0441\u043b\u0438 \u043e\u043d \u043f\u0440\u043e\u0434\u0438\u043a\u0442\u043e\u0432\u0430\u043d \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438, \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043e\u0442 \u0440\u0430\u0441\u0448\u0430\u0440\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438. \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u0448 <code>Request<\/code> \u0445\u043e\u0442\u044c \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, <strong>\u043d\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/strong>. \u0420\u0430\u043d\u043d\u0435\u0440 \u0436\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0435\u0433\u043e \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u043d\u0430 \u043d\u0451\u043c. \u041c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0435\u0451 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c. \u0423 \u043d\u0430\u0441 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0435\u0442 \u043f\u0440\u0430\u0432\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0443\u0441\u043e\u0440, \u043d\u043e \u043d\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0443 \u0445\u043e\u0440\u043e\u0448\u043e \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0433\u0438\u043f\u043e\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 <code>Path<\/code> \u043d\u0430 \u0442\u043e\u043a\u0435\u043d\u044b \u0434\u0430\u0441\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u044d\u0444\u0444\u0435\u043a\u0442, \u0447\u0435\u043c \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b.<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f <code>Request<\/code> \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \/ \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u043b\u0435\u043f\u0443\u044e. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043e\u043d \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043b\u0435\u0433\u0447\u0435 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0440\u0430\u043d\u043d\u0435\u0440\u0430. \u041e\u0442 \u043d\u0430\u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0449\u0435\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u043c\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u043a\u0430\u043a\u043e\u043c-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u043c \u0437\u0430\u043a\u0443\u0442\u043a\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041e\u043f\u0438\u0440\u0430\u044f\u0441\u044c \u043d\u0430 \u044d\u0442\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u043d\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u043d\u0438\u0446\u0430\u0435\u043c\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0440\u0430\u043d\u043d\u0435\u0440 \u0441\u043c\u043e\u0436\u0435\u0442 \u043d\u0443\u0436\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0432 <code>HttpClient<\/code> (\u0438 \u0435\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438).<\/p>\n<h3>\u041c\u0435\u0442\u043e\u0434\u044b \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u044b<\/h3>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u043a\u0432\u0435\u0441\u0442\u043e\u0432. \u041f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445) \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c <code>Request&lt;'input, 'output><\/code>:<\/p>\n<pre><code class=\"fsharp\">val GetProjectIssues: ownerAlias: string * projectAlias: string * ?page: int * ?size: int -> Request&lt;unit, _> <\/code><\/pre>\n<p>\u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0445\u043e\u0434, \u0438 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043e\u043d \u0434\u0435\u0444\u0435\u043a\u0442\u043e\u0432 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442. \u041d\u043e \u0435\u0441\u043b\u0438 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0438 <code>Request<\/code>-\u043e\u043c \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043d\u0430\u0448\u0435\u0433\u043e API, \u0442\u043e \u0437\u0430 \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0446\u0435\u043f\u0438\u0442\u044c\u0441\u044f \u0438 \u043d\u0430\u043a\u0438\u0434\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c:<\/p>\n<pre><code class=\"fsharp\">val GetProjectIssues: ownerAlias: string * projectAlias: string * ?page: int * ?size: int -> GetProjectIssues <\/code><\/pre>\n<p>\u042d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0443\u0437\u0435\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0434\u043e \u044d\u0442\u043e\u0433\u043e, \u043d\u043e \u0448\u0430\u0433 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 <code>Request&lt;'input, 'output><\/code> \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0422\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c, \u0442\u043e \u044d\u0442\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041f\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u043a\u0435 \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0430\u044f \u0444\u0430\u0431\u0440\u0438\u043a\u0430:<\/p>\n<pre><code class=\"fsharp\">type IRequestFactory&lt;'input, 'output> = abstract member Create : unit -> Request&lt;'input, 'output> <\/code><\/pre>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430\u0448 \u0437\u0430\u043f\u0440\u043e\u0441 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u043a\u043e\u0440\u0434\u043e\u043c \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0439 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c\u044e, \u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438. \u041e\u0442\u0441\u044e\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 <code>Create<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c <strong>\u043d\u0435<\/strong>\u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u042d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u0438\u0437-\u0437\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430. \u041d\u043e \u043c\u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u043f\u0443\u043d\u043a\u0442 \u043d\u0430\u0448\u0438\u0445 \u0438\u0437\u044b\u0441\u043a\u0430\u043d\u0438\u0439, \u0438 \u043e\u043d \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0438\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0431\u0443\u0434\u0443\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438. \u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0444\u0430\u0431\u0440\u0438\u043a \u043d\u0438\u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e \u0438\u043c\u0435\u043d\u0430 \u043f\u043e\u0433\u0440\u0443\u0431\u0435\u0435 \u0438 \u043f\u043e\u0431\u043b\u0438\u0436\u0435 \u043a \u0441\u0443\u0442\u0438:<\/p>\n<pre><code class=\"fsharp\">type IAsRequest&lt;'input, 'output> = \/\/ \u0414\u0435\u043b\u0430\u0442\u044c `AsRequest` \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0438\u043b\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043c -- \u0434\u0435\u043b\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a. abstract member AsRequest : unit -> Request&lt;'input, 'output> <\/code><\/pre>\n<p>\u0413\u043b\u044f\u0434\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u0438, \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u0442\u0438\u043f\u043e\u0432-\u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435. \u0421 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 <code>Path<\/code> \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043f\u043e\u043f\u0440\u043e\u0449\u0435 \u0438 \u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043a\u0430\u0441\u043a\u0430\u0434\u043e\u043c, \u043d\u043e, \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443, \u043d\u0430 \u044d\u0442\u043e\u043c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f. \u041f\u0440\u0438 \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435 \u043d\u0430\u043c \u044d\u0442\u0430 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0430 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u043d\u0443\u0436\u043d\u0430, \u0438 \u043c\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u044b\u0438\u0433\u0440\u0430\u0435\u043c \u043e\u0442 \u0440\u0435\u043a\u043e\u0440\u0434\u043e\u0432, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u0435\u0441\u0442\u044c <code>{with}<\/code>-\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0438 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p><em>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u043d\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439 \u0432\u044b\u0431\u043e\u0440, \u0442\u0430\u043a \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u043e\u0434\u043e\u0433\u0435\u043d, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f <\/em><code><em>record like<\/em><\/code><em> \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438 \u043e\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430.<\/em> <em>\u0412\u043e\u043f\u0440\u043e\u0441 \u043b\u0438\u0448\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c.<\/em><\/p>\n<p>\u0414\u043e \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u043b, \u0447\u0442\u043e \u0438\u0437 <code>uri<\/code>, <code>url<\/code>, <code>path<\/code> \u0438 \u0442. \u0434. \u0447\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u0438 \u0432 \u043c\u043e\u0438\u0445 \u043f\u043b\u0430\u043d\u0430\u0445 \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0437\u0430\u0431\u044b\u0442\u044c. \u041d\u043e \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0437\u0430\u043f\u0438\u0441\u0438, \u0441\u0442\u0440\u043e\u043a\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u2014 \u044d\u0442\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u0421\u0442\u0440\u043e\u043a\u0430 \u0442\u0430\u043a \u0436\u0435 \u0443\u0434\u043e\u0431\u043d\u0430 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0440\u0435\u0434\u043e\u0439, \u043a\u0430\u043a \u0443\u0434\u043e\u0431\u0435\u043d <code>json<\/code> \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445. \u041d\u0435 \u0441\u0447\u0438\u0442\u0430\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0434\u043e\u043c\u0435\u043d\u043e\u0432, <code>json<\/code> \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0434 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u0412 \u0440\u0435\u0434\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432 <code>JObject<\/code> \u0438\u043b\u0438 <code>ExpandoObject<\/code>. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0432 <code>json<\/code>-\u0441\u0442\u0440\u043e\u043a\u0435 \u0447\u0435\u0440\u0435\u0437 <code>regex<\/code>-\u044b \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043e <code>string<\/code> \u2014 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b \u0434\u043b\u044f \u0448\u0430\u0440\u0436\u0435\u0439 \u0438, \u0431\u044b\u0442\u044c \u043c\u043e\u0436\u0435\u0442, \u0434\u043b\u044f \u0432\u044b\u0441\u0448\u0435\u0439 \u043b\u0438\u0433\u0438 \u0431\u0430\u0439\u0442\u043e\u043b\u044e\u0431\u043e\u0432 (\u043d\u0435 \u0448\u0430\u0440\u044e, \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c), \u043d\u043e \u043d\u0435 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0421 <code>Uri<\/code> \u043d\u0430\u0434\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. <code>Uri<\/code> \u2014 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0444\u0430\u0440\u0448, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430\u0437\u0430\u0434. \u042d\u0442\u043e \u0444\u0430\u0440\u0448, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0432\u0430\u043b\u044f\u043b\u0438 \u0432 \u043f\u0430\u043d\u0438\u0440\u043e\u0432\u043a\u0435 \u0438 \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u043b\u0438 \u0442\u0435\u0440\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043a\u043e\u0442\u043b\u0435\u0442\u044b. \u0412 \u043d\u0438\u0445 \u043d\u0435 \u043d\u0430\u0434\u043e \u0437\u0430\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u0431\u044b\u0442\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 \u043d\u0430\u0434\u0435\u0436\u0434\u0435 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u043c\u043e\u043b\u043e\u0442\u044c \u0438 \u0437\u0430\u0436\u0430\u0440\u0438\u0442\u044c. \u0422\u0430\u043a \u0447\u0442\u043e \u0432\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f \u043f\u0443\u0442\u0438, \u0432\u0441\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438.<\/p>\n<p>\u0413\u043e\u0432\u043e\u0440\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e, \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u0435\u0442\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u0446\u0438\u0440\u0443\u0435\u0442 <code>Request<\/code>, \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043c\u0435\u0449\u0430\u0442\u044c \u0432\u0441\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:<\/p>\n<pre><code class=\"fsharp\">type GetProjectIssues = { ownerAlias : string projectAlias : string page : int option size : int option } <\/code><\/pre>\n<p>\u0410 <code>Path<\/code> \u0438 <code>Query<\/code> \u0431\u0443\u0434\u0443\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0445\u043e\u0434\u0443.<\/p>\n<pre><code class=\"fsharp\">with interface IAsRequest&lt;unit, response> with override this.AsRequest () = { Path = $\"\/project\/{this.userAlias}\/{this.projectAlias}\/issue\" Query = [ let inline (!) key value = [ match value with | Some value -> key, string value | None -> () ] yield! !\"page\" this.page yield! !\"size\" this.size ] HttpMethod = \"GET\" HttpHeaders = [] } <\/code><\/pre>\n<p>\u0414\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0442\u0438\u043f\u0430 <code>credentials<\/code> \u0438\u043b\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0441\u0430\u0439\u0442\u0430, \u0431\u044b\u043b\u0438 \u043e\u0442\u0431\u0440\u043e\u0448\u0435\u043d\u044b \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444\u0435. \u0422\u0430\u043a \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0438 <code>with<\/code>-\u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u0435\u0440\u0432\u043e\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f UI, \u0432\u0442\u043e\u0440\u043e\u0435 \u2014 \u0434\u043b\u044f \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u2014 \u0434\u043b\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0432\u043e\u043f\u0440\u043e\u0441. \u0420\u0430\u0437 \u0443\u0436 \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u0442\u043e \u043f\u043e\u0447\u0435\u043c\u0443 <code>Request<\/code> \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u043a\u043e\u0440\u0434\u043e\u043c, \u0430 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0451\u043d\u043d\u044b\u043c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u043c\u0435\u0442\u043e\u0434\u0443-\u043e\u0431\u044a\u0435\u043a\u0442\u0443? \u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0440\u0435\u043a\u043e\u0440\u0434\u0430 (\u0430 \u0442\u0430\u043a\u0436\u0435 DU) \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u0437\u0430 \u0441\u0447\u0451\u0442 \u0447\u0435\u0433\u043e \u0440\u0435\u043a\u043e\u0440\u0434 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u044b\u0432\u0430\u0442\u044c \u0434\u043e\u043c\u0435\u043d\u044b \u0442\u0430\u043c, \u0433\u0434\u0435 \u043d\u0430\u0434\u043e \u044f\u0432\u043d\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0434\u0432\u0443\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0441\u0432\u044f\u0437\u044c \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439. \u041d\u0435 \u043c\u043e\u0433\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u043b\u043e\u0432\u043a\u0430 \u0431\u044b\u043b\u0430 \u0437\u0434\u0435\u0441\u044c \u0441\u0442\u0440\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430, \u0441\u043a\u043e\u0440\u0435\u0435, \u043e\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0435\u0431\u044f \u0445\u043e\u0440\u043e\u0448\u043e \u0437\u0430\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b\u0430 \u0438 \u0441\u0442\u0430\u043b\u0430 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0435\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<h3>\u0418\u043c\u0438\u0442\u0430\u0446\u0438\u044f \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438<\/h3>\n<p>\u0422\u0435, \u043a\u0442\u043e \u0447\u0438\u0442\u0430\u043b <a href=\"https:\/\/habr.com\/ru\/companies\/first\/articles\/799233\/\">4 \u0447\u0430\u0441\u0442\u044c &#171;\u0411\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u0434\u0430&#187;<\/a>, \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0433\u0440\u0430\u0444\u044b \u0432 \u0442\u0438\u043f\u044b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>type extensions<\/code>. \u041d\u0430\u0448 \u0433\u0440\u0430\u0444 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0434\u0435\u0440\u0435\u0432\u0443, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0449\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043b\u0438\u0448\u044c \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443. \u041e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u0445\u043e\u0434 \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d, \u043d\u043e \u043e\u043d \u0436\u0435\u043b\u0435\u0437\u043d\u043e \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043d\u043e\u0434\u044b.<\/p>\n<p>\u041d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e \u0442\u0438\u043f\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u043d\u043e\u0434\u0443 \u0432 \u0434\u0440\u0435\u0432\u0435, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0435\u0451 \u043a\u043e\u0440\u0435\u043d\u044c, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u043e\u0433\u043e, \u0435\u0441\u0442\u044c \u043b\u0438 \u0432 \u043d\u0435\u0439 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 \u043d\u0435\u0442:<\/p>\n<pre><code class=\"fsharp\">type GitFlic = ... type project = ... type ``project {userAlias}`` = ... <\/code><\/pre>\n<p>\u0420\u0435\u043a\u043e\u0440\u0434\u044b \u0431\u0435\u0437 \u043f\u043e\u043b\u0435\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u043e\u0434\u044b \u0431\u0435\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u0434\u043e \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0431\u043e \u0447\u0435\u0440\u0435\u0437 DU, \u043b\u0438\u0431\u043e \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043b\u0438\u0431\u043e \u0447\u0435\u0440\u0435\u0437 <code>singleton<\/code>:<\/p>\n<pre><code class=\"fsharp\">[&lt;RequireQualifiedAccess>] type project = Instance  \/\/ \u0414\u043b\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0438: \/\/ \u0422\u0430\u043a\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438. \/\/ project() = project() \/\/ = true type project = struct end  type ``project`` private () =     static member val instance = ``project`` () <\/code><\/pre>\n<p>\u0412\u0441\u0435 \u044d\u0442\u0438 \u0442\u0438\u043f\u044b \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0438\u043c\u0451\u043d, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0432\u0440\u044f\u0434 \u043b\u0438 \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u0430 \u043b\u0438\u0448\u044c \u0432\u043d\u0435\u0448\u043d\u044f\u044f \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u044c, \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043e \u0447\u0451\u043c \u0438\u0434\u0451\u0442 \u0440\u0435\u0447\u044c \u043b\u0438\u0448\u044c \u043f\u043e \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044e \u0432 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0435 (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445). \u041d\u0435\u0439\u043c\u0438\u043d\u0433 \u043a\u0435\u0439\u0441\u043e\u0432 DU \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u043e\u0436\u0435, \u0447\u0435\u043c \u043d\u0435\u0439\u043c\u0438\u043d\u0433 \u0442\u0438\u043f\u043e\u0432, \u0447\u0442\u043e \u0432 \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0441 \u0438\u0445 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u0440\u0435\u0435 \u0441\u0431\u0438\u0432\u0430\u0442\u044c \u043d\u0430\u0441, \u0442\u0430\u043a \u0447\u0442\u043e \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0438\u043b\u0438 <code>singleton<\/code>. \u041e\u0431\u0430 \u0441\u043b\u0443\u0447\u0430\u044f \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442 \u043d\u0435\u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u00ab\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u00bb, \u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043e\u043d \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f.<\/p>\n<p>\u041d\u043e\u0434\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u044b:<\/p>\n<pre><code class=\"fsharp\">type ``project {userAlias}`` = { userAlias : string } <\/code><\/pre>\n<p>\u042d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0430 \u0442\u0438\u043f\u0430\u0445 \u043d\u0435 \u043d\u0430\u0434\u043e, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442:<\/p>\n<pre><code class=\"fsharp\">type ``project {userAlias} {projectAlias}`` = { userAlias : string projectAlias : string }  type ``project {userAlias} {projectAlias} issue`` = { userAlias : string projectAlias : string } <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u0432\u0435\u0434\u0451\u043c \u0440\u0435\u0447\u044c \u043e \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u043e\u043c API, \u0442\u043e \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u0441\u0435\u0447\u044c \u043d\u043e\u0434\u0443 \u043e\u0442 \u0435\u0451 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432, \u0435\u0441\u043b\u0438 \u0443 \u043d\u0435\u0451 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430. \u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a\u0430\u043a \u043a \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u0430\u043c, \u0442\u0430\u043a \u0438 \u043a \u043f\u0440\u043e\u0433\u043b\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0443\u0442\u0438. \u041e\u0431\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u043a \u0440\u0430\u0437\u043d\u043e\u0447\u0442\u0435\u043d\u0438\u044e \u043f\u0440\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0438\u043c\u0451\u043d \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u044f\u0445 \u0434\u0435\u0440\u0435\u0432\u0430:<\/p>\n<pre><code class=\"fsharp\">gitflic.project.[\"kleidemos\"].[\"myFirstProject\"].issue.issue.issue.issue  gitflic.project.[\"kleidemos\"].[\"myFirstProject\"].[\"someId\"].GET <\/code><\/pre>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u043c\u0435\u0442\u043e\u0434\u044b (\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435) \u0438 \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u043e\u0434\u044b \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>IAsRequest<\/code>. \u0425\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0445 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0432\u043c\u0435\u0441\u0442\u0435 \u0438\u043b\u0438 \u043f\u043e\u0440\u043e\u0437\u043d\u044c \u2014 \u0432\u043e\u043f\u0440\u043e\u0441 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"fsharp\">type ``project {userAlias} {projectAlias} issue {localId} GET`` = { ownerAlias : string projectAlias : string page : int option size : int option } with interface IAsRequest&lt;... <\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u043e\u0434\u0435 \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0432\u0435\u0434\u0443\u0449\u0438\u0435 \u043a \u0435\u0451 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c \u043d\u043e\u0434\u0430\u043c:<\/p>\n<pre><code class=\"fsharp\">type GitFlic with member this.project = project.instance  type ``project {userAlias} {projectAlias}`` with \/\/ \u0422\u0438\u043f\u043e\u0432 \u0441 \u0442\u0430\u043a\u0438\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u0435\u0439 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \/\/ \u043d\u043e \u044f\u0432\u043d\u043e\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043f\u043e\u043d\u044f\u0442\u044c,  \/\/ \u043e \u0447\u0451\u043c \u0438\u0434\u0451\u0442 \u0440\u0435\u0447\u044c. member this.issue : ``project {userAlias} {projectAlias} issue`` = { userAlias = this.userAlias projectAlias : this.projectAlias } <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u0442\u043e \u043d\u0443\u0436\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0442\u043e\u0440. \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u043b \u0438\u043b\u0438 \u0437\u0430\u0431\u044b\u043b, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 (\u0431\u0435\u0437\u044b\u043c\u044f\u043d\u043d\u043e\u0433\u043e) \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0442\u043e\u0440\u0430 \u0432 F# \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"fsharp\">type project with member this.Item with get userAlias : ``project {userAlias}`` = { userAlias = userAlias }  \/\/ project().[\"userAlias\"] <\/code><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/yb\/qg\/5a\/ybqg5ayle3otl6nyaqkndbfplly.png\" data-src=\"https:\/\/habrastorage.org\/webt\/yb\/qg\/5a\/ybqg5ayle3otl6nyaqkndbfplly.png\"\/><\/figure>\n<p><em>\u0412 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 F# \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u0431\u0435\u0437 \u0442\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043a\u043e\u0431\u043a\u043e\u0439, \u043d\u043e \u044d\u0442\u043e \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u043a \u0440\u0430\u0437\u043d\u043e\u0447\u0442\u0435\u043d\u0438\u044e.<\/em> <em>\u041e\u0442\u043d\u044b\u043d\u0435 \u0432\u0438\u0434\u044f \u0437\u0430\u043f\u0438\u0441\u044c <\/em><code><em>f[x]<\/em><\/code><em>, \u044f \u043d\u0435 \u043c\u043e\u0433\u0443 \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0435 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<\/em> <em>\u041c\u043d\u0435 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u0434\u043e\u0432\u043e\u0434\u044b \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u0444\u0438\u0447\u0438 \u043c\u043d\u0435 \u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438, \u0430 \u0432\u0441\u044f \u0430\u043a\u0446\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e\u0435 C#-like \u043e\u0431\u043e\u0441\u0442\u0440\u0435\u043d\u0438\u0435.<\/em> <em>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0438 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u044f \u0438\u0437\u0431\u0435\u0433\u0430\u044e \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u0447\u0430\u0449\u0435, \u0447\u0435\u043c \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0442\u043e\u0440\u0430\u043c\u0438.<\/em><\/p>\n<p>\u0427\u0430\u0441\u0442\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0438\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u043a \u043c\u0435\u0442\u043e\u0434\u0430\u043c API (\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u043d\u043e\u0434\u0430\u043c) \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043b\u0430\u0441\u0441\u0430. \u0412 \u0446\u0435\u043b\u044f\u0445 \u0443\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u0442 \u0436\u0435 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438 \u0434\u043b\u044f \u043d\u0435\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u0443\u0435\u043c\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432:<\/p>\n<pre><code class=\"fsharp\">type ``project {userAlias} {projectAlias} issue`` with member this.GET (?page : int, ?size : int) : ``project {userAlias} {projectAlias} issue GET`` = { userAlias = this.userAlias projectAlias = this.projectAlias page = page size = size } <\/code><\/pre>\n<p>\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043a\u043e \u0432\u0441\u0435\u043c \u043d\u043e\u0434\u0430\u043c \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043a \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0434\u0435\u0440\u0435\u0432\u0430:<\/p>\n<pre><code class=\"fsharp\">type ``project {userAlias} {projectAlias} issue GET`` with member this.Parent = : ``project {userAlias} {projectAlias} issue`` = { userAlias = this.userAlias projectAlias = this.projectAlias } <\/code><\/pre>\n<p>\u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437 \u043f\u0443\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0442\u043e \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043f\u0440\u043e\u0449\u0435 \u043f\u0440\u043e\u0439\u0442\u0438 \u0432\u0441\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043e\u0442 <code>gitflic<\/code> \u0434\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043f\u0435\u0440\u0435\u043a\u0438\u0434\u044b\u0432\u0430\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0438\u043c\u0435\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0440\u0435\u043a\u043e\u0440\u0434\u0430 \u0432 \u043f\u0443\u0442\u044c.<\/p>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c <code>GitFlic.instance<\/code> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u00ab\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439\u00bb:<\/p>\n<pre><code class=\"fsharp\">[&lt;AutoOpen>] module Auto = let gitflic = Routes.GitFlic.instance  gitflic.project.[\"kleidemos\"].[\"myfirstproject\"].GET() <\/code><\/pre>\n<h3>\u0420\u0430\u043d\u043d\u0435\u0440<\/h3>\n<p>\u0420\u0430\u043d\u043d\u0435\u0440 \u2014 \u0432\u0435\u0449\u044c \u0441\u0443\u0433\u0443\u0431\u043e \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u0430\u044f, \u043d\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e. \u0412\u043e\u0442 \u0442\u0430\u043a \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 <code>HttpClient<\/code> \u0438 <code>Hopac<\/code>:<\/p>\n<pre><code class=\"fsharp\">module Runner = open Thoth.Json.Net  type Config = ...  let run (client : HttpClient) config (input : 'input) (request : Request&lt;'input, 'output>) : 'output Job = job { use content = new StringContent( if typeof&lt;'input> &lt;> typeof&lt;unit> then Encode.Auto.toString input else \"\" ) content.Headers.ContentType &lt;- Headers.MediaTypeHeaderValue.Parse \"application\/json\"  use msg = new HttpRequestMessage( HttpMethod.Parse request.HttpMethod , config.ApiAddress + request.PathAndQuery , Content = content ) for key, value in request.Headers do msg.Headers.Add(key, value) do  let auth = config.AuthorizationHeader msg.Headers.Add(auth.Name, auth.Value)          let! response = client.SendAsync msg if typeof&lt;'output> = typeof&lt;unit> then return unbox&lt;'output> () else let! respContent = response.Content.ReadAsStringAsync() return respContent |> Decode.Auto.unsafeFromString } <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044b \u043a\u043e\u0434\u044b \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u0442. \u043f., \u043d\u043e \u0432 F# \u0442\u0430\u043a\u0438\u0435 \u0432\u0435\u0449\u0438 \u043b\u0443\u0447\u0448\u0435 \u0440\u0435\u0448\u0430\u0442\u044c \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u043f\u043e\u0436\u0435\u043b\u0430\u043d\u0438\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043a\u043e\u0434\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0430 \u0437\u0434\u0435\u0441\u044c \u0436\u0435, \u043d\u043e \u043d\u0435 \u0444\u0430\u043a\u0442.<\/p>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u0432\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f <code>unit<\/code> \u0432 <code>'input<\/code> \u0438 <code>'output<\/code>. \u0412 \u043e\u0431\u043e\u0438\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043f\u0443\u0441\u0442\u043e\u0435 \u0442\u0435\u043b\u043e. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043c\u044b \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 <code>Content<\/code>, \u0445\u043e\u0442\u044f \u0438\u0434\u0435\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u0443\u0447\u0448\u0435 (\u043d\u043e \u0432\u0435\u0440\u0431\u043e\u0437\u043d\u0435\u0435) \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c <code>msg.Content<\/code>. \u0410 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 \u043c\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0440\u0430\u0437\u0443 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c <code>()<\/code> (\u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <code>unit<\/code>).<\/p>\n<p>\u041d\u0430 \u0431\u0430\u0437\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>run<\/code> \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0440\u0430\u043d\u043d\u0435\u0440\u0430 \u0438 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b:<\/p>\n<pre><code class=\"fsharp\">module Runner = ...  type Main = {         HttpClient : HttpClient         Config : Config     }  let create client config : Main = ...  type Main with \/\/ `request` \u0438 `input` \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0435\u0441\u0442\u0430\u043c\u0438 member this.Run (input : 'input) (request : Request&lt;'input, 'output>) : 'output Job = ... member this.RunAsRequest (input : 'input) (preRequest : IAsRequest&lt;'input, 'output>) : 'output Job = ... <\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c <code>Request<\/code> \u0438 <code>IAsRequest<\/code>:<\/p>\n<pre><code class=\"fsharp\">\/\/ \u041f\u043e\u0441\u043b\u0435 \u043c\u043e\u0434\u0443\u043b\u044f Runner (\u0430 \u043d\u0435 \"\u0432\") [&lt;AutoOpen>] module RunnerAuto =     type Request&lt;'input, 'output> with         member this.Run (input : 'input) (runner : Runner.Main) : 'output Job = ...      type IAsRequest&lt;'input, 'output> with         member this.Run (input : 'input) (runner : Runner.Main) : 'output Job = ... <\/code><\/pre>\n<p>\u042f \u0438\u043c\u0435\u044e \u043e\u0431\u044b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0431\u043e\u043b\u0442\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0433\u0443 \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0443\u0442\u043e\u0432\u044b\u0439 <code>gitflic<\/code> \u0438 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u0435\u0433\u043e \u043a \u0440\u0430\u043d\u043d\u0435\u0440\u0443:<\/p>\n<pre><code class=\"fsharp\">module Runner = type Main with member this.api = Routes.GitFlic.instance  runner.api.project.[\"kleidemos\"].[\"myfirstproject\"].GET() <\/code><\/pre>\n<h3>\u0411\u0438\u043b\u0434\u0435\u0440<\/h3>\n<p><em>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0431\u0438\u043b\u0434\u0435\u0440\u043e\u0432 (\u043e\u043d\u0438 \u0436\u0435 <\/em><code><em>Computation Expressions<\/em><\/code><em> \u0438\u043b\u0438 <\/em><code><em>CE<\/em><\/code><em>), \u0442\u043e <\/em><a href=\"https:\/\/habr.com\/ru\/articles\/804631\/\"><em>\u0437\u0434\u0435\u0441\u044c<\/em><\/a><em> \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430, \u043f\u043e\u0441\u0432\u044f\u0449\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u0435.<\/em> <em>\u042f \u0436\u0435 \u0432\u0435\u0434\u0443 \u0440\u0435\u0447\u044c \u043f\u0440\u043e \u0431\u044b\u0442\u043e\u0432\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0443 \u043f\u043e\u044f\u0441\u043d\u044f\u0442\u044c \u043b\u0438\u0448\u044c \u0442\u043e, \u0447\u0442\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f.<\/em><\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0430\u043c \u0447\u0430\u0441\u0442\u043e \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u044f\u0432\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0440\u0430\u043d\u043d\u0435\u0440\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0439\u043f\u044b \u0438\u043b\u0438 <code>type extensions<\/code>, \u043d\u043e \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0440\u0430\u043d\u043d\u0435\u0440 \u0438 \u0431\u0438\u043b\u0434\u0435\u0440. \u041c\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0441\u043e\u0431\u043e \u043d\u0435 \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u0432\u043e\u0439 \u0431\u0438\u043b\u0434\u0435\u0440 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 <strong>\u043d\u0430\u0447\u0430\u043b\u043e<\/strong> \u0440\u0430\u043d\u043d\u0435\u0440-\u0431\u0438\u043b\u0434\u0435\u0440\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <code>Hopac.JobBuilder<\/code>:<\/p>\n<pre><code class=\"fsharp\">module Runner = type JobBuilder (httpClient, serverConfig) = inherit Hopac.JobBuilder()  \/\/ \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0443\u043b\u0438\u0432\u0430\u043d\u044f return! \u043a Request&lt;unit, 'output> member this.ReturnFrom (request : Request&lt;unit, 'output>) = run httpClient serverConfig () request  \/\/ \u0414\u043b\u044f let! \u043a Request&lt;unit, 'output> member this.Bind (request : Request&lt;unit, 'output>, f : 'output -> 'y Job) = job { let! output = this.ReturnFrom request return! f output } <\/code><\/pre>\n<p>\u0423 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u0438\u043b\u0434\u0435\u0440\u0430 \u0435\u0441\u0442\u044c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432:<\/p>\n<pre><code class=\"fsharp\">JobBuilder(clinet, config) { ... } <\/code><\/pre>\n<p>\u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u043d \u0438\u0434\u0451\u0442 \u0432 \u043e\u0431\u043e\u0437\u0435 <code>Runner.Main<\/code>:<\/p>\n<pre><code class=\"fsharp\">module Runner = type Main with member this.job = JobBuilder(this.HttpClient, this.Config) <\/code><\/pre>\n<p>\u0418 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0435\u0433\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"fsharp\">runner.job { ... } <\/code><\/pre>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043e\u043d \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u043c <code>Hopac.JobBuilder<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 <code>Job<\/code>, <code>Task<\/code>, <code>Async<\/code> \u0438 <code>Observable<\/code>. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u0447\u0438\u0441\u0442\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u043a \u0438 \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043d\u0430\u0448\u0438\u043c <code>Request&lt;unit, 'output><\/code>:<\/p>\n<pre><code class=\"fsharp\">runner.job { do! timeOutMillis 1000 return 42 } <\/code><\/pre>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043c\u0443\u0449\u0430\u0442\u044c, \u043d\u043e \u044f \u0441\u0447\u0438\u0442\u0430\u044e \u0442\u0430\u043a\u0443\u044e \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u043a\u043e\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0443\u0442\u044f\u043c\u0438, \u0438 \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0431\u0438\u043b\u0434\u0435\u0440 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e REST-\u0432\u044b\u0437\u043e\u0432 \u043f\u043e\u043a\u0438\u043d\u0443\u043b \u0441\u043a\u043e\u0443\u043f. \u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u0435\u0442, \u043d\u043e \u0435\u0451 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u043e\u0442\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u043c\u043c\u0438\u0442\u0430, \u043a\u043e\u0433\u0434\u0430 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u043d\u044f\u0442\u044b.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ax\/sg\/dn\/axsgdnw76ootebotrm5xaxuokyq.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ax\/sg\/dn\/axsgdnw76ootebotrm5xaxuokyq.png\"\/><\/figure>\n<p>\u041f\u043e\u043a\u0430 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0431\u0438\u043b\u0434\u0435\u0440\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 <code>let!<\/code>, <code>do!<\/code> \u0438 <code>return!<\/code> \u0434\u043b\u044f <code>Request&lt;unit, 'output><\/code>. \u041d\u043e \u0432 F# \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u044d\u043a\u0441\u043f\u043b\u0438\u0446\u0438\u0442\u043d\u043e, \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434 <code>AsRequest<\/code> \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0442 \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430, \u043f\u043e\u043a\u0430 \u043c\u044b \u043d\u0435 \u0441\u043a\u0430\u0441\u0442\u0438\u043c \u0442\u0438\u043f \u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443:<\/p>\n<pre><code class=\"fsharp\">runner.job {     do! timeOutMillis 100     let! project = (runner.api.project.[\"kleidemos\"].[\"myfirstproject\"].GET() :> IAsRequest&lt;_,_>).AsRequest()     return project.language } <\/code><\/pre>\n<p>\u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0432\u0435\u0440\u0431\u043e\u0437\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c, \u0442\u0430\u043a \u0447\u0442\u043e \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0431\u0438\u043b\u0434\u0435\u0440 \u0435\u0449\u0451 \u043d\u0430 \u0434\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430:<\/p>\n<pre><code class=\"fsharp\">\/\/ \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u043f\u0430\u0440\u0430 \u0434\u043b\u044f IAsRequest&lt;unit, 'output> member this.ReturnFrom (preRequest : IAsRequest&lt;unit, 'output>) =     run httpClient serverConfig () (preRequest.AsRequest())  member this.Bind (preRequest : IAsRequest&lt;unit, 'output>, f : 'output -> 'y Job) = job {     let! output = this.ReturnFrom preRequest     return! f output } <\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"fsharp\">runner.job {     do! timeOutMillis 100     let! project = runner.api.project.[\"kleidemos\"].[\"myfirstproject\"].GET()     return project.language } <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c <code>'input<\/code> \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043e\u0442 <code>()<\/code>. \u041d\u0430\u0441, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0443\u0441\u0442\u0440\u043e\u0438\u043b\u043e \u0431\u044b \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0430:<\/p>\n<pre><code class=\"fsharp\">runner.job {     let! project = gitflic.project.POST() {         title = \"created-via-api\"         isPrivate = true         alias = \"created-via-api\"         ownerAlias = \"kleidemos\"         ownerAliasType = \"USER\"         language = \"F#\"         description = \"Created via api.\"     }      return project.id } <\/code><\/pre>\n<p>\u041d\u043e \u0431\u0438\u043b\u0434\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u044e \u043a\u043e\u0434\u0430 \u0441\u0442\u0440\u043e\u0433\u043e \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u0430\u0445. \u0414\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u043e\u0442\u0440\u0435\u0437\u043a\u0430 <code>.POST() {<\/code> \u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c <code>request<\/code> \u0438 <code>input<\/code> \u043d\u0430 \u0432\u0445\u043e\u0434 \u0432 \u0431\u0438\u043b\u0434\u0435\u0440, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0442\u0443\u043f\u043b:<\/p>\n<pre><code>let! project =  gitflic.project.POST() , { title = \"created-via-api\" ... } <\/code><\/pre>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u044d\u0442\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0432 \u0441\u043b\u0430\u0431\u043e\u0439 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u043e\u0440\u0442\u0435\u0436\u0430. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438, \u0441\u0440\u0430\u0432\u043d\u0438\u0442 \u0441 \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430\u043c\u0438 \u0438 \u043b\u0438\u0448\u044c \u043f\u043e\u0442\u043e\u043c \u0443\u043a\u0430\u0436\u0435\u0442 \u043d\u0430 \u043d\u0430\u0448\u0443 \u043e\u0448\u0438\u0431\u043a\u0443. \u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0442\u0438\u043f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u044f\u0432\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0430. \u0415\u0449\u0451 \u043b\u0443\u0447\u0448\u0435, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443:<\/p>\n<pre><code class=\"fsharp\">module Runner = ...  type Send&lt;'input, 'output> = {         Request : Request&lt;'input, 'output>         Input : 'input     }  [&lt;AutoOpen>] module RunnerAuto =     type IAsRequest&lt;'input, 'output> with         member this.Send input : Runner.Send&lt;'input, 'output> = {             Request = this.AsRequest()             Input = input         } <\/code><\/pre>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0432 F# \u044d\u043a\u0441\u043f\u043b\u0438\u0446\u0438\u0442\u043d\u044b\u0435, \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0438\u0445 \u0438\u043c\u043f\u043b\u0438\u0446\u0438\u0442\u043d\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 <code>gitflic.project.POST().Send<\/code> \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f IDE.<\/p>\n<p>\u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0451 \u043f\u0430\u0440\u0443 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 \u0431\u0438\u043b\u0434\u0435\u0440:<\/p>\n<pre><code class=\"fsharp\">\/\/ \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u043f\u0430\u0440\u0430 \u0434\u043b\u044f Send&lt;unit, 'output> member this.ReturnFrom (send : Send&lt;'input, 'output>) =     run httpClient serverConfig send.Input send.Request  member this.Bind (send : Send&lt;'input, 'output>, f : 'output -> 'y Job) = job {     let! output = this.ReturnFrom send     return! f output } <\/code><\/pre>\n<p>\u0418 \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"fsharp\">runner.job {     let! project = gitflic.project.POST().Send {         title = \"created-via-api\" ...     }      return project.id } <\/code><\/pre>\n<p><em>\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 <\/em><code><em>Hopac.JobBuilder<\/em><\/code><em> \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0432 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0439 \u043c\u0430\u043d\u0435\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0435 <\/em><code><em>Source<\/em><\/code><em>, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0438\u043f \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b \u043e\u0442 \u043d\u0430\u0441 \u043f\u043e 2 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u0430.<\/em> <em>\u041d\u043e \u0435\u0441\u043b\u0438 \u0431\u044b \u0431\u0438\u043b\u0434\u0435\u0440 \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0442\u0430\u043a, \u043a\u0430\u043a \u043d\u0430\u0434\u043e, \u0442\u043e \u043d\u0430\u043c \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 <\/em><code><em>Job<\/em><\/code><em> \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 (<\/em><code><em>Request<\/em><\/code><em>, <\/em><code><em>IAsRequest<\/em><\/code><em>, <\/em><code><em>Send<\/em><\/code><em>), \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u043e\u0434\u0435\u043b\u044b\u0432\u0430\u043b \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.<\/em> <em>\u0417\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u0432\u0448\u0438\u043c\u0441\u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u0440\u043e\u0439\u0442\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 <\/em><code><em>FsToolkit.ErrorHandling<\/em><\/code><em> (\u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0442\u0440\u0435\u0434\u044b), \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0438\u043b\u0434\u0435\u0440\u043e\u0432, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u044d\u0442\u043e\u0439 \u0441\u0445\u0435\u043c\u0435.<\/em> <em>\u0422\u0435\u043c, \u043a\u0442\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0447\u0430\u0441\u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c <\/em><code><em>JobBuilder<\/em><\/code><em>, \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0437\u0430\u0434\u0443\u043c\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u043c\u0435\u043d\u0435 \u0435\u0433\u043e \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u044f\u0437\u044b\u043a \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442.<\/em><\/p>\n<h3>\u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043c\u044b \u0441\u043f\u0440\u043e\u0435\u0446\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0434\u0440\u0435\u0432\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 REST API, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u043e\u0434\u0440\u0443\u0436\u0438\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044e \u0441 \u0431\u0438\u043b\u0434\u0435\u0440\u043e\u043c. \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u043e\u0434\u0430, \u043d\u043e \u0443\u0441\u0435\u0447\u0451\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c <a href=\"https:\/\/gitflic.ru\/project\/strigoenturbano\/article7\">\u0437\u0434\u0435\u0441\u044c<\/a>. \u0421\u0430\u043c\u043e\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0442\u0430\u043c \u043d\u0435\u0442, \u0435\u0433\u043e \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438. \u0412 \u043d\u0435\u0439 \u044f \u0434\u0430\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440, \u0440\u0430\u0437\u0431\u0435\u0440\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a\u0438\u0435 \u0435\u0449\u0451 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438 \u0434\u0440\u0435\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u044b.<\/p>\n<p>\u0410\u0432\u0442\u043e\u0440 \u0441\u0442\u0430\u0442\u044c\u0438 <a class=\"mention\" href=\"\/users\/kleidemos\">@kleidemos<\/a><\/p>\n<hr\/>\n<p>\u041d\u041b\u041e \u043f\u0440\u0438\u043b\u0435\u0442\u0435\u043b\u043e \u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u043b\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u043c\u043e\u043a\u043e\u0434 \u0434\u043b\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u043b\u043e\u0433\u0430:<br \/> <a href=\"https:\/\/firstvds.ru\/?utm_source=habr&amp;utm_medium=article&amp;utm_campaign=product&amp;utm_content=vds15exeptprogrev\">\u2014 15% \u043d\u0430 \u0437\u0430\u043a\u0430\u0437 \u043b\u044e\u0431\u043e\u0433\u043e VDS<\/a> (\u043a\u0440\u043e\u043c\u0435 \u0442\u0430\u0440\u0438\u0444\u0430 \u041f\u0440\u043e\u0433\u0440\u0435\u0432) \u2014 HABRFIRSTVDS<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/829634\/\"> https:\/\/habr.com\/ru\/articles\/829634\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"\"><\/figure>\n<p>\u0412 <a href=\"https:\/\/habr.com\/ru\/companies\/first\/articles\/817261\/\">\u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a> \u043c\u044b \u043f\u0440\u043e\u0435\u0446\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u0432 DTO \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 REST. \u0412 \u044d\u0442\u043e\u0439 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0435\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u0432 \u043d\u0435\u0447\u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"fsharp\">let! issues = gitflic.project.[\"kleidemos\"].[\"myFirstProject\"].issue.GET(limit = 24) <\/code><\/pre>\n<p>\u0418\u043c\u0438\u0442\u0430\u0446\u0438\u044f \u043f\u0443\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441, \u043e\u0434\u043d\u0430\u043a\u043e \u0435\u0451 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0440\u044f\u0434 \u0441\u0430\u043c\u043e\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0445 \u0441\u0442\u0430\u0434\u0438\u0439.<\/p>\n<h3>\u041e\u0431\u044a\u0435\u043a\u0442\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0441\u0435\u0442\u0438<\/h3>\n<p>\u0412\u044b\u0437\u043e\u0432 <code>HttpClient<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0443\u043b\u044c\u043c\u0438\u043d\u0430\u0446\u0438\u0435\u0439 \u043c\u0435\u0442\u043e\u0434\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043d\u0438\u043c \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0441\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041c\u0435\u043d\u044f \u0442\u0430\u043a\u0430\u044f \u0441\u0432\u044f\u0437\u044c \u0443\u0433\u043d\u0435\u0442\u0430\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0438\u0437\u0431\u0435\u0433\u0430\u044e \u0435\u0451 \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0438 \u043c\u043e\u0433\u0443 \u0432\u043e\u0432\u0441\u0435 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0435\u0451 \u0432 \u043f\u0430\u043a\u0435\u0442. \u0410 \u0435\u0449\u0451 \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u043f\u043e\u0434\u0441\u0435\u043b \u043d\u0430 <code>Godot<\/code>, \u0430\u043d\u0434\u0440\u043e\u0438\u0434-\u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435 \u0434\u0430\u0451\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0441\u0435\u0442\u044c\u044e \u0432 \u043e\u0431\u0445\u043e\u0434 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0434\u0432\u0438\u0436\u043a\u0430. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u043b\u0430 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440 \u0434\u0430\u0436\u0435 \u043f\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u043a \u043c\u043e\u0435\u043c\u0443 \u043b\u0435\u0433\u0430\u0441\u0438.<\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0441\u0435\u0442\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043c\u0435\u0441\u0442\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u043a\u0438\u043c \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0430\u043a\u0442\u043e\u0440\u043e\u043c (\u0432 \u0448\u0438\u0440\u043e\u043a\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435). \u042d\u0442\u043e\u0442 \u0430\u043a\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0434\u0442\u0438 \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0435 \u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043e\u0431\u0432\u044f\u0437\u043a\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f <strong>\u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0433\u043b\u0443\u0431\u044c \u0430\u043a\u0442\u043e\u0440\u0430<\/strong>, \u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044e API \u0441\u043d\u0430\u0440\u0443\u0436\u0438. \u041a\u043e\u043c\u043f\u043b\u0435\u043a\u0441 \u0438\u0437 \u0430\u043a\u0442\u043e\u0440\u0430 \u0438 \u0435\u0433\u043e \u043e\u0431\u0432\u044f\u0437\u043a\u0438 \u044f \u043f\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u0431\u0443\u0434\u0443 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u043d\u043d\u0435\u0440\u043e\u043c, \u043d\u043e \u044d\u0442\u043e\u0442 \u043d\u0435\u0439\u043c\u0438\u043d\u0433 \u043d\u0435\u043b\u044c\u0437\u044f \u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e. \u041e\u0431\u0440\u0430\u0449\u0430\u044e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0440\u0430\u043d\u043d\u0435\u0440\u0430, \u0430 \u043d\u0435 <code>HttpClient<\/code> \u0438\u043b\u0438 \u0430\u043a\u0442\u043e\u0440\u0430. \u0418 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0438 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"fsharp\">type 'output Request = { Url : string HttpMethod : string Content : string Headers : (string * string) list } <\/code><\/pre>\n<p><code>'output<\/code> \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043b\u0438\u0448\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0442\u0438\u043f. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u0440\u0435\u043a\u043e\u0440\u0434. \u041d\u043e \u043b\u0443\u0447\u0448\u0435 \u0432\u044b\u043a\u0438\u043d\u0443\u0442\u044c \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0438 <code>Content<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u0437-\u0437\u0430 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u043f\u043e\u043b\u0435\u0439 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u0430 \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u044f\u043d\u0443\u0442\u044c \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0442\u043e\u043d\u043d\u0443 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0438 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0435\u0433 \u043a \u043c\u043e\u0440\u044e. \u0420\u0430\u0437 \u043c\u044b \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0438\u0433\u0440\u043e\u043a\u043e\u043c, \u0442\u043e \u044d\u0442\u043e\u0442 \u0436\u0435 \u0438\u0433\u0440\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0437\u0430 [\u0434\u0435]\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e:<\/p>\n<pre><code class=\"fsharp\">type Request&lt;'input, 'output> = { Url : string HttpMethod : string Headers : (string * string) list Input : 'input } <\/code><\/pre>\n<p><s>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u043c\u043e\u043d\u0430\u0434\u0443, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c <\/s><code><s>zero<\/s><\/code><s>, <\/s><code><s>map<\/s><\/code><s> \u0438 \u0442. \u0434.<\/s><\/p>\n<p>\u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u043e, \u043d\u043e \u0434\u0430\u043b\u0435\u0435 \u043d\u0430\u0434\u043e \u0437\u0430\u0434\u0430\u0442\u044c\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c, \u0437\u0430\u0447\u0435\u043c \u0437\u0434\u0435\u0441\u044c <code>Input<\/code>. \u0418\u0437-\u0437\u0430 \u043d\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u0435\u0437 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u0438\u043f\u0430, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430\u0441 \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043d\u0438 \u043a\u0430\u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0438 \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439. \u0422\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u043d\u0438\u043c \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e \u0446\u0435\u043b\u044f\u043c \u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u044f\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0415\u0441\u043b\u0438 \u0432\u044b\u043a\u0438\u043d\u0443\u0442\u044c \u044d\u0442\u043e \u043f\u043e\u043b\u0435, \u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0432\u0445\u043e\u0434\u0435 \u0438 \u0432\u044b\u0445\u043e\u0434\u0435, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0440\u0430\u043d\u043d\u0435\u0440 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0441\u043c\u043e\u0436\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441:<\/p>\n<pre><code class=\"fsharp\">type Request&lt;'input, 'output> = { Url : string HttpMethod : string Headers : (string * string) list } <\/code><\/pre>\n<figure class=\"\"><\/figure>\n<p>\u041f\u043e \u0442\u0435\u043c \u0436\u0435 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0440\u0435\u0437\u0430\u0442\u044c <code>Url<\/code>, \u0438\u0431\u043e \u0435\u0441\u043b\u0438 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0434\u043e\u043c\u0435\u043d\u0430, \u043f\u043e\u0440\u0442 \u0438 \u0442. \u0434., \u0442\u043e \u0432\u0441\u044f \u044d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f <code>Request<\/code>. \u042d\u0442\u043e \u0441\u043d\u043e\u0432\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0431\u0435\u0437 \u043e\u0449\u0443\u0442\u0438\u043c\u043e\u0439 \u0434\u043b\u044f \u043d\u0430\u0441 \u043f\u043e\u043b\u044c\u0437\u044b. \u0414\u0430\u043d\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442\u044c \u0440\u0430\u043d\u043d\u0435\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442 \u0435\u0451 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u0443\u0442\u0451\u043c:<\/p>\n<pre><code class=\"fsharp\">type Request&lt;'input, 'output> = { Path : string HttpMethod : string Headers : (string * string) list } <\/code><\/pre>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u044f \u0432\u043e\u043b\u0435\u043d \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c <code>Query<\/code>-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437 <code>Path<\/code>. \u0421\u043b\u0438\u0442\u044c \u0438\u0445 \u0432\u043e\u0435\u0434\u0438\u043d\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442, \u0430 \u0432\u043e\u0442 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u0438\u0445 \u043e\u0442\u0442\u0443\u0434\u0430 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441 \u0431\u0443\u0431\u043d\u043e\u043c:<\/p>\n<pre><code class=\"fsharp\">type Request&lt;'input, 'output> = { Path : string Query : (string * string) list HttpMethod : string Headers : (string * string) list } with member this.PathAndQuery : string = ... <\/code><\/pre>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043a\u043e\u0433\u043e-\u0442\u043e \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442, \u043f\u043e\u0447\u0435\u043c\u0443 <code>Query<\/code> \u0438 <code>Headers<\/code> \u0431\u044b\u043b\u0438 \u0437\u0430\u0434\u0430\u043d\u044b \u0441\u043f\u0438\u0441\u043a\u043e\u043c, \u0430 \u043d\u0435 <code>Map<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u043b \u0431\u044b \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u0443\u044e \u0437\u0430\u0449\u0438\u0442\u0443 \u043e\u0442 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432, \u0431\u044b\u0442\u044c \u043c\u043e\u0436\u0435\u0442, \u0443\u0441\u043a\u043e\u0440\u0438\u043b \u043f\u043e\u0438\u0441\u043a \u0438 \u0442. \u0434. \u042d\u0442\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0448\u0430\u0433, \u0435\u0441\u043b\u0438 \u043e\u043d \u043f\u0440\u043e\u0434\u0438\u043a\u0442\u043e\u0432\u0430\u043d \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438, \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043e\u0442 \u0440\u0430\u0441\u0448\u0430\u0440\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438. \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u0448 <code>Request<\/code> \u0445\u043e\u0442\u044c \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, <strong>\u043d\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/strong>. \u0420\u0430\u043d\u043d\u0435\u0440 \u0436\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0435\u0433\u043e \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u043d\u0430 \u043d\u0451\u043c. \u041c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0435\u0451 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c. \u0423 \u043d\u0430\u0441 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0435\u0442 \u043f\u0440\u0430\u0432\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0443\u0441\u043e\u0440, \u043d\u043e \u043d\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0443 \u0445\u043e\u0440\u043e\u0448\u043e \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0433\u0438\u043f\u043e\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 <code>Path<\/code> \u043d\u0430 \u0442\u043e\u043a\u0435\u043d\u044b \u0434\u0430\u0441\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u044d\u0444\u0444\u0435\u043a\u0442, \u0447\u0435\u043c \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b.<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f <code>Request<\/code> \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \/ \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u043b\u0435\u043f\u0443\u044e. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043e\u043d \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043b\u0435\u0433\u0447\u0435 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0440\u0430\u043d\u043d\u0435\u0440\u0430. \u041e\u0442 \u043d\u0430\u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0449\u0435\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u043c\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u043a\u0430\u043a\u043e\u043c-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u043c \u0437\u0430\u043a\u0443\u0442\u043a\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041e\u043f\u0438\u0440\u0430\u044f\u0441\u044c \u043d\u0430 \u044d\u0442\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u043d\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u043d\u0438\u0446\u0430\u0435\u043c\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0440\u0430\u043d\u043d\u0435\u0440 \u0441\u043c\u043e\u0436\u0435\u0442 \u043d\u0443\u0436\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0432 <code>HttpClient<\/code> (\u0438 \u0435\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438).<\/p>\n<h3>\u041c\u0435\u0442\u043e\u0434\u044b \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u044b<\/h3>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u043a\u0432\u0435\u0441\u0442\u043e\u0432. \u041f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445) \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c <code>Request&lt;'input, 'output><\/code>:<\/p>\n<pre><code class=\"fsharp\">val GetProjectIssues: ownerAlias: string * projectAlias: string * ?page: int * ?size: int -> Request&lt;unit, _> <\/code><\/pre>\n<p>\u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0445\u043e\u0434, \u0438 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043e\u043d \u0434\u0435\u0444\u0435\u043a\u0442\u043e\u0432 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442. \u041d\u043e \u0435\u0441\u043b\u0438 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0438 <code>Request<\/code>-\u043e\u043c \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043d\u0430\u0448\u0435\u0433\u043e API, \u0442\u043e \u0437\u0430 \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0446\u0435\u043f\u0438\u0442\u044c\u0441\u044f \u0438 \u043d\u0430\u043a\u0438\u0434\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c:<\/p>\n<pre><code class=\"fsharp\">val GetProjectIssues: ownerAlias: string * projectAlias: string * ?page: int * ?size: int -> GetProjectIssues <\/code><\/pre>\n<p>\u042d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0443\u0437\u0435\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0434\u043e \u044d\u0442\u043e\u0433\u043e, \u043d\u043e \u0448\u0430\u0433 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 <code>Request&lt;'input, 'output><\/code> \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0422\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c, \u0442\u043e \u044d\u0442\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041f\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u043a\u0435 \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0430\u044f \u0444\u0430\u0431\u0440\u0438\u043a\u0430:<\/p>\n<pre><code class=\"fsharp\">type IRequestFactory&lt;'input, 'output> = abstract member Create : unit -> Request&lt;'input, 'output> <\/code><\/pre>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430\u0448 \u0437\u0430\u043f\u0440\u043e\u0441 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u043a\u043e\u0440\u0434\u043e\u043c \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0439 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c\u044e, \u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438. \u041e\u0442\u0441\u044e\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 <code>Create<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c <strong>\u043d\u0435<\/strong>\u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u042d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u0438\u0437-\u0437\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430. \u041d\u043e \u043c\u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u043f\u0443\u043d\u043a\u0442 \u043d\u0430\u0448\u0438\u0445 \u0438\u0437\u044b\u0441\u043a\u0430\u043d\u0438\u0439, \u0438 \u043e\u043d \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0438\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0431\u0443\u0434\u0443\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438. \u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0444\u0430\u0431\u0440\u0438\u043a \u043d\u0438\u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e \u0438\u043c\u0435\u043d\u0430 \u043f\u043e\u0433\u0440\u0443\u0431\u0435\u0435 \u0438 \u043f\u043e\u0431\u043b\u0438\u0436\u0435 \u043a \u0441\u0443\u0442\u0438:<\/p>\n<pre><code class=\"fsharp\">type IAsRequest&lt;'input, 'output> = \/\/ \u0414\u0435\u043b\u0430\u0442\u044c `AsRequest` \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0438\u043b\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043c -- \u0434\u0435\u043b\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a. abstract member AsRequest : unit -> Request&lt;'input, 'output> <\/code><\/pre>\n<p>\u0413\u043b\u044f\u0434\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0430\u0442\u044c\u0438, \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u0442\u0438\u043f\u043e\u0432-\u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435. \u0421 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 <code>Path<\/code> \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043f\u043e\u043f\u0440\u043e\u0449\u0435 \u0438 \u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043a\u0430\u0441\u043a\u0430\u0434\u043e\u043c, \u043d\u043e, \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443, \u043d\u0430 \u044d\u0442\u043e\u043c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f. \u041f\u0440\u0438 \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435 \u043d\u0430\u043c \u044d\u0442\u0430 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0430 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u043d\u0443\u0436\u043d\u0430, \u0438 \u043c\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u044b\u0438\u0433\u0440\u0430\u0435\u043c \u043e\u0442 \u0440\u0435\u043a\u043e\u0440\u0434\u043e\u0432, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u0435\u0441\u0442\u044c <code>{with}<\/code>-\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0438 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p><em>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u043d\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439 \u0432\u044b\u0431\u043e\u0440, \u0442\u0430\u043a \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u043e\u0434\u043e\u0433\u0435\u043d, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f <\/em><code><em>record like<\/em><\/code><em> \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438 \u043e\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430.<\/em> <em>\u0412\u043e\u043f\u0440\u043e\u0441 \u043b\u0438\u0448\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c.<\/em><\/p>\n<p>\u0414\u043e \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u043b, \u0447\u0442\u043e \u0438\u0437 <code>uri<\/code>, <code>url<\/code>, <code>path<\/code> \u0438 \u0442. \u0434. \u0447\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u0438 \u0432 \u043c\u043e\u0438\u0445 \u043f\u043b\u0430\u043d\u0430\u0445 \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0437\u0430\u0431\u044b\u0442\u044c. \u041d\u043e \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0437\u0430\u043f\u0438\u0441\u0438, \u0441\u0442\u0440\u043e\u043a\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u2014 \u044d\u0442\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u0421\u0442\u0440\u043e\u043a\u0430 \u0442\u0430\u043a \u0436\u0435 \u0443\u0434\u043e\u0431\u043d\u0430 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0440\u0435\u0434\u043e\u0439, \u043a\u0430\u043a \u0443\u0434\u043e\u0431\u0435\u043d <code>json<\/code> \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445. \u041d\u0435 \u0441\u0447\u0438\u0442\u0430\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0434\u043e\u043c\u0435\u043d\u043e\u0432, <code>json<\/code> \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0434 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u0412 \u0440\u0435\u0434\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432 <code>JObject<\/code> \u0438\u043b\u0438 <code>ExpandoObject<\/code>. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0432 <code>json<\/code>-\u0441\u0442\u0440\u043e\u043a\u0435 \u0447\u0435\u0440\u0435\u0437 <code>regex<\/code>-\u044b \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043e <code>string<\/code> \u2014 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b \u0434\u043b\u044f \u0448\u0430\u0440\u0436\u0435\u0439 \u0438, \u0431\u044b\u0442\u044c \u043c\u043e\u0436\u0435\u0442, \u0434\u043b\u044f \u0432\u044b\u0441\u0448\u0435\u0439 \u043b\u0438\u0433\u0438 \u0431\u0430\u0439\u0442\u043e\u043b\u044e\u0431\u043e\u0432 (\u043d\u0435 \u0448\u0430\u0440\u044e, \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c), \u043d\u043e \u043d\u0435 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0421 <code>Uri<\/code> \u043d\u0430\u0434\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. <code>Uri<\/code> \u2014 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0444\u0430\u0440\u0448, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430\u0437\u0430\u0434. \u042d\u0442\u043e \u0444\u0430\u0440\u0448, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0432\u0430\u043b\u044f\u043b\u0438 \u0432 \u043f\u0430\u043d\u0438\u0440\u043e\u0432\u043a\u0435 \u0438 \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u043b\u0438 \u0442\u0435\u0440\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043a\u043e\u0442\u043b\u0435\u0442\u044b. \u0412 \u043d\u0438\u0445 \u043d\u0435 \u043d\u0430\u0434\u043e \u0437\u0430\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u0431\u044b\u0442\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 \u043d\u0430\u0434\u0435\u0436\u0434\u0435 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u043c\u043e\u043b\u043e\u0442\u044c \u0438 \u0437\u0430\u0436\u0430\u0440\u0438\u0442\u044c. \u0422\u0430\u043a \u0447\u0442\u043e \u0432\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f \u043f\u0443\u0442\u0438, \u0432\u0441\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438.<\/p>\n<p>\u0413\u043e\u0432\u043e\u0440\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e, \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u0435\u0442\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u0446\u0438\u0440\u0443\u0435\u0442 <code>Request<\/code>, \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043c\u0435\u0449\u0430\u0442\u044c \u0432\u0441\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:<\/p>\n<pre><code class=\"fsharp\">type GetProjectIssues = { ownerAlias : string projectAlias : string page : int option size : int option } <\/code><\/pre>\n<p>\u0410 <code>Path<\/code> \u0438 <code>Query<\/code> \u0431\u0443\u0434\u0443\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0445\u043e\u0434\u0443.<\/p>\n<pre><code class=\"fsharp\">with interface IAsRequest&lt;unit, response> with override this.AsRequest () = { Path = $\"\/project\/{this.userAlias}\/{this.projectAlias}\/issue\" Query = [ let inline (!) key value = [ match value with | Some value -> key, string value | None -> () ] yield! !\"page\" this.page yield! !\"size\" this.size ] HttpMethod = \"GET\" HttpHeaders = [] } <\/code><\/pre>\n<p>\u0414\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0442\u0438\u043f\u0430 <code>credentials<\/code> \u0438\u043b\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0441\u0430\u0439\u0442\u0430, \u0431\u044b\u043b\u0438 \u043e\u0442\u0431\u0440\u043e\u0448\u0435\u043d\u044b \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444\u0435. \u0422\u0430\u043a \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0438 <code>with<\/code>-\u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u041f\u0435\u0440\u0432\u043e\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f UI, \u0432\u0442\u043e\u0440\u043e\u0435 \u2014 \u0434\u043b\u044f \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u2014 \u0434\u043b\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0432\u043e\u043f\u0440\u043e\u0441. \u0420\u0430\u0437 \u0443\u0436 \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u0442\u043e \u043f\u043e\u0447\u0435\u043c\u0443 <code>Request<\/code> \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u043a\u043e\u0440\u0434\u043e\u043c, \u0430 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0451\u043d\u043d\u044b\u043c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u043c\u0435\u0442\u043e\u0434\u0443-\u043e\u0431\u044a\u0435\u043a\u0442\u0443? \u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0440\u0435\u043a\u043e\u0440\u0434\u0430 (\u0430 \u0442\u0430\u043a\u0436\u0435 DU) \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u0437\u0430 \u0441\u0447\u0451\u0442 \u0447\u0435\u0433\u043e \u0440\u0435\u043a\u043e\u0440\u0434 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u044b\u0432\u0430\u0442\u044c \u0434\u043e\u043c\u0435\u043d\u044b \u0442\u0430\u043c, \u0433\u0434\u0435 \u043d\u0430\u0434\u043e \u044f\u0432\u043d\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0434\u0432\u0443\u0445<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-426556","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/426556","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=426556"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/426556\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=426556"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=426556"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=426556"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}