|
@@ -79,3 +79,70 @@ Set-Cookie: cookie-name=cookie-value; Domain=domain-value
|
|
|
```
|
|
|
Set-Cookie: name=Alexey; Domain=google.com
|
|
|
```
|
|
|
+<h6>URL</h6>
|
|
|
+```
|
|
|
+https://www.google.com/search?q=python&start=10#something
|
|
|
+```
|
|
|
+- часть `https://` это, как мы уже знаем, протокол, в данном случае HTTPs, шифрованный HTTP;
|
|
|
+
|
|
|
+- `www.google.com` это доменное имя;
|
|
|
+
|
|
|
+- порт в данном случае не указан, так как указан протокол HTTPs, значит, будет использован порт «по умолчанию», 443й, то есть эти URI имеют идентичный результат:
|
|
|
+ `https://www.google.com/search?q=python&start=10#something`
|
|
|
+
|
|
|
+`https://www.google.com:443/search?q=python&start=10#something`
|
|
|
+
|
|
|
+- часть `/search` отвечает за адрес ресурса на веб-сервере;
|
|
|
+
|
|
|
+- следующая часть `?q=python&start=10` это дополнительные параметры, которые передаются на сервер, их ещё называют query-параметрами, параметрами запроса. Такие динамические параметры используются программами на сервере, обрабатывающими запрос. В данном случае параметр `q` (вероятно, сокращение от _query_, что можно перевести как _запрос_), равен `python`, то есть поисковый запрос для этой странички это слово «python», а параметр `start` равен `10`, этот параметр похоже используется Google для разбивки результатов поисковой выдачи на страницы. Как видно, query-параметры в URI разделяются символом `&`;
|
|
|
+
|
|
|
+- часть `#something` это так называемый _anchor_ — якорь на странице. Например, если страница представляет собой длинный текст, разбитый на разделы, можно каждому разделу установить свой якорь, тогда, открывая страницу с указанием якоря для первого раздела наша страничка сразу «проскроллится», то есть пролистается до первого раздела. Эти якори явным образом указываются в HTML-документе. Как мы помним, HTML-документ это просто текстовый документ с определённой заложенной в него структурой. Вот эта структура в частности и позволяет делать такие якори внутри страницы. С HTML подробнее мы познакомимся позже.
|
|
|
+
|
|
|
+<h6>Способы передачи данных на сервер:</h6>
|
|
|
+
|
|
|
+- передача данных в составе элемента пути, например, `https://google.com/search/python` или `https://rroom.io/user/alexey.goloburdin`
|
|
|
+
|
|
|
+- query-параметры, например, `https://google.com/search?q=python&start=10&lang=ru`. Если надо использовать символ `&` в составе значения параметра, он заменяется на `%26`: `google.com/search?q=you%26me`. Для пробелам замена на `%20`.
|
|
|
+
|
|
|
+- передача в теле запроса, например, в теле POST-запроса
|
|
|
+
|
|
|
+- в cookies
|
|
|
+
|
|
|
+- в HTTP-заголовках запроса, в том числе своих HTTP-заголовках запроса (HTTP это позволяет)
|
|
|
+
|
|
|
+- есть и другие варианты, например, веб-сокеты, но это уже специфика для своих задач
|
|
|
+
|
|
|
+<h6>Методология REST</h6>
|
|
|
+CRUD — сокращение от Create, Read, Update, Delete.
|
|
|
+
|
|
|
+Как может выглядеть API для CRUD-операций по книгам:
|
|
|
+
|
|
|
+- `POST /books/` — создание новой книги
|
|
|
+
|
|
|
+- `GET /books/` — чтение списка книг. Пагинация, то есть разбитие списка книг на страницы, осуществляется Query-параметрами, например, так:
|
|
|
+- `GET /books/?page=3`. Параметр `page` равен `3`. Наш бэкенд-сервис считает эти параметры и поймет, что запрашивается страница с номером 3. Аналогично для каких-то динамических фильтров могут использоваться тоже query-параметры.
|
|
|
+
|
|
|
+- `GET /books/123` — получение информации по книге с идентификатором `123`
|
|
|
+
|
|
|
+- `PUT /books/123` — обновление информации по книге с идентификатором `123` — причем обновляется вся книга, то есть должны быть переданы все поля книги этому сервису на вход
|
|
|
+
|
|
|
+- `PATCH /books/123` — частичное обновление книги с идентификатором `123` , например, только её названия. Если этот сервис примет на вход только название книги, то он должен изменить название книги и всё
|
|
|
+
|
|
|
+- `DELETE /books/123` — удаление данных о книге с идентификатором `123`
|
|
|
+
|
|
|
+
|
|
|
+Каждый из этих веб-сервисов отдаёт свои HTTP-статусы, которые подробно говорят клиенту о том, что именно произошло на бэкенде с запросом, например:
|
|
|
+
|
|
|
+- если клиент запрашивает список книг и книги найдены, то статус `200`;
|
|
|
+
|
|
|
+- если клиент запрашивает одну книгу по идентификатору и книга не найдена, то статус `404`;
|
|
|
+
|
|
|
+- если клиент пытается добавить книгу, но не передал токен аутентификации или токен некорректный, то `401`;
|
|
|
+
|
|
|
+- если клиент передал корректный токен аутентификации, но пользователю почему-то нельзя добавлять книги — например, если их могут добавлять на сайт только какие-то конкретные пользователи, не все, то статус `403`;
|
|
|
+
|
|
|
+- если пытается обновить несуществующую книгу — `404`;
|
|
|
+
|
|
|
+- если клиент создал новую книгу успешно — `201`;
|
|
|
+
|
|
|
+- если клиент успешно обновил книгу — `204` или `200`.
|