dtelenkov 11 bulan lalu
induk
melakukan
e3067aa4a3
2 mengubah file dengan 86 tambahan dan 7 penghapusan
  1. 19 7
      .obsidian/workspace.json
  2. 67 0
      hardcore web development/5-6-7 Internet.md

+ 19 - 7
.obsidian/workspace.json

@@ -42,9 +42,21 @@
                 "source": false
               }
             }
+          },
+          {
+            "id": "02794159e0215561",
+            "type": "leaf",
+            "state": {
+              "type": "markdown",
+              "state": {
+                "file": "hardcore web development/5-6-7 Internet.md",
+                "mode": "source",
+                "source": false
+              }
+            }
           }
         ],
-        "currentTab": 2
+        "currentTab": 3
       }
     ],
     "direction": "vertical"
@@ -142,14 +154,14 @@
   },
   "left-ribbon": {
     "hiddenItems": {
-      "switcher:Меню быстрого перехода": false,
-      "graph:Граф": false,
-      "canvas:Создать новый холст": false,
-      "command-palette:Открыть палитру команд": false,
-      "markdown-importer:Импорт Markdown-файлов": false
+      "switcher:Open quick switcher": false,
+      "graph:Open graph view": false,
+      "canvas:Create new canvas": false,
+      "command-palette:Open command palette": false,
+      "markdown-importer:Open format converter": false
     }
   },
-  "active": "2f8b433f866fad6e",
+  "active": "02794159e0215561",
   "lastOpenFiles": [
     "Разное.md",
     "hardcore web development/5-6-7 Internet.md",

+ 67 - 0
hardcore web development/5-6-7 Internet.md

@@ -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`.