<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Лайвкодинг WEB on IT Ментор | Python методичка</title><link>https://zhukovsd.github.io/python-backend-interview-prep/livecoding/tasks/web/</link><description>Recent content in Лайвкодинг WEB on IT Ментор | Python методичка</description><generator>Hugo</generator><language>ru</language><atom:link href="https://zhukovsd.github.io/python-backend-interview-prep/livecoding/tasks/web/index.xml" rel="self" type="application/rss+xml"/><item><title>Дизайн REST API для сущности группы</title><link>https://zhukovsd.github.io/python-backend-interview-prep/livecoding/tasks/web/group-rest-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://zhukovsd.github.io/python-backend-interview-prep/livecoding/tasks/web/group-rest-api/</guid><description>&lt;h4&gt;1. Дизайн REST API для сущности группы&lt;/h4&gt;
 &lt;p&gt;&lt;strong&gt;Условие задачи:&lt;/strong&gt;&lt;br&gt;
Необходимо спроектировать REST API для сущности Группа.&lt;/p&gt;
&lt;p&gt;Нужно предложить интерфейс для:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;создания группы&lt;/li&gt;
&lt;li&gt;получения группы или списка групп&lt;/li&gt;
&lt;li&gt;изменения группы&lt;/li&gt;
&lt;li&gt;удаления группы&lt;/li&gt;
&lt;li&gt;добавления и удаления связей, если группа содержит сотрудников или вложенные группы&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Пример интерфейса:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Создание группы:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-http" data-lang="http"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;POST /api/v1/groups/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Получение списка групп:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-http" data-lang="http"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;GET /api/v1/groups/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Получение одной группы:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-http" data-lang="http"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;GET /api/v1/groups/{group_id}/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Частичное изменение группы:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-http" data-lang="http"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;PATCH /api/v1/groups/{group_id}/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Полное обновление группы:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-http" data-lang="http"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;PUT /api/v1/groups/{group_id}/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Удаление группы:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-http" data-lang="http"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;DELETE /api/v1/groups/{group_id}/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote class="book-hint warning"&gt;
 &lt;strong&gt;Спойлеры к решению&lt;/strong&gt;
&lt;/blockquote&gt;

&lt;details &gt;&lt;summary&gt;Подсказки&lt;/summary&gt;
 &lt;div class="markdown-inner"&gt;
 &lt;ul&gt;
&lt;li&gt;Основной ресурс — &lt;code&gt;groups&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Для создания группы используется &lt;code&gt;POST /api/v1/groups/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Для получения списка групп используется &lt;code&gt;GET /api/v1/groups/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Для получения одной группы используется &lt;code&gt;GET /api/v1/groups/{group_id}/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Для частичного изменения используется &lt;code&gt;PATCH&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Для полного обновления используется &lt;code&gt;PUT&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Для удаления используется &lt;code&gt;DELETE&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Связи с сотрудниками и вложенными группами лучше вынести в отдельные endpoints.&lt;/li&gt;
&lt;li&gt;Добавление связи удобно делать через &lt;code&gt;POST&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Удаление связи удобно делать через &lt;code&gt;DELETE&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

 &lt;/div&gt;
&lt;/details&gt;

&lt;details &gt;&lt;summary&gt;Решение&lt;/summary&gt;
 &lt;div class="markdown-inner"&gt;
 &lt;h3 id="основной-rest-api-для-групп"&gt;
 Основной REST API для групп
 &lt;a class="anchor" href="#%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%bd%d0%be%d0%b9-rest-api-%d0%b4%d0%bb%d1%8f-%d0%b3%d1%80%d1%83%d0%bf%d0%bf"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-http" data-lang="http"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;POST /api/v1/groups/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Создание группы.&lt;/p&gt;</description></item></channel></rss>