# отправить GET-запрос, содержащий заголовок с JWT (JSON Web Token) curl -H GET https://localhost:8080/some -H "Authorization: <JWT>" -i
# отправить GET-запрос, содержащий имя пользователя user и его пароль pass прямо в командной строке (антисекурно) curl -u "user:pass" -H GET https://localhost:8080/some -i
# отправить GET-запрос, содержащий имя пользователя user, а пароль curl спросит при отправке, он не будет виден на экране и останется в истории команд консоли curl -u "user" -H GET https://localhost:8080/some -i
# отправить POST-запрос с телом запроса из определённого файла и с заголовком, объявляющим, что мы несём JSON curl -X POST https://localhost:8080/createSomething -H "Content-Type: application/json" -d "@data.json" -i
# отправить POST-запрос с телом запроса, указанном прямо в строке, и с заголовком, объявляющим, что мы несём JSON curl -X POST https://localhost:8080/createSomething -H "Content-Type: application/json" -d '{"somefield":"somevalue"}' -i
# url encode curl -X GET "https://1.1.1.1:8080/find" -G --data-urlencode "param=123 abc" -i
Интерфейс = общая граница двух отдельно существующих составных частей, посредством которой они обмениваются информацией в режиме одновременности. Этот обмен может быть, как двусторонним, так и односторонним.
Протокол = набор соглашений интерфейса логического уровня. Эти соглашения задают единообразный способ передачи сообщений и обработки ошибок при взаимодействии программного обеспечения разнесённой в пространстве аппаратуры, соединённой тем или иным интерфейсом.
TCP/IP = набор сетевых протоколов передачи данных.
Стек протоколов TCP/IP включает в себя четыре уровня:
URL состоит из протокола (protocol), хоста (host), пути (path), запроса (query) и фрагмента. Путь используется для организации иерархических ресурсов, запрос — для неиерархических ресурсов и для параметров операции. Фрагмент идентифицирует подчинённый ресурс, не имеющий прямого URL, обычно это якорная ссылка на странице.
Protocol Host Path Query Fragment ↓ ↓ ↓ ↓ ↓ http://nyashnye-kotiki.xxx/breeds/maine-coon/?deliver_to=Moscow#photo
HTTP (HyperText Transfer Protocol — "протокол передачи гипертекста") — прикладной протокол передачи данных. Основой HTTP является технология "клиент-сервер", то есть предполагается существование потребителей (клиентов), которые инициируют соединение и посылают запрос, и поставщиков (серверов), которые ожидают соединения для получения запроса, производят необходимые действия и возвращают обратно сообщение с результатом.
Эта диаграмма отображает простейшую архитектуру веб-приложения:
Каждое HTTP-сообщение состоит из трёх частей, которые передаются в указанном порядке:
Стартовая строка для запроса (от клиента): <method> <URI> HTTP/<version>
Пример: GET /path/resource?param1=value1¶m2=value2 HTTP/1.1
Стартовая строка для ответа (от сервера): HTTP/<version> <КодСостояния> <Пояснение>
Пример: HTTP/1.0 200 OK
Общая структура запроса:
Обычный GET-запрос.
Запрос клиента:
GET /wiki/страница HTTP/1.1
Host: ru.wikipedia.org
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5
Accept: text/html
Connection: close
(пустая строка)
Ответ сервера:
HTTP/1.1 200 OK
Date: Wed, 11 Feb 2009 11:20:59 GMT
Server: Apache
X-Powered-By: PHP/5.2.4-2ubuntu5wm1
Last-Modified: Wed, 11 Feb 2009 11:20:59 GMT
Content-Language: ru
Content-Type: text/html; charset=utf-8
Content-Length: 1234
Connection: close
(пустая строка)
(HTML-код запрошенной страницы)
HTTP-протокол (начиная с версии 1.1) оперирует методами OPTIONS , GET , HEAD , POST , PUT , PATCH , DELETE , TRACE , CONNECT (ссылки на RFC).
GET используется для запроса данных с указанного адреса ресурса.
Клиент МОЖЕТ передавать параметры запроса прямо в первой строке запроса в URI целевого ресурса после символа "?":
GET /path/resource?param1=value1¶m2=value2 HTTP/1.1
HEAD синонимичен по семантике методу GET, но не обязан возвращать тело ответа, а только лишь его заголовки (метаинформацию о ресурсе).
POST применяется для передачи данных в теле запроса по заданному адресу. Чаще всего для СОЗДАНИЯ объекта данных (какой-то сущности) на сервере, или для её обновления — передаются данные согласно ВСЕЙ СХЕМЕ данных сущности.
Например, оставить комментарий на форуме:
POST forum.com/threads/gameofthrones/messages
{"visibleOnlyForFriends": false, "text": "Мой великий комментарий!"}
В данном примере, при каждом POST-запросе мы получаем новый комментарий на форуме.
PUT применяется для передачи данных в теле запроса по заданному адресу с указанием (идентификатора, id) уже существующего объекта данных (сущности) на сервере. Чаще всего для частичного ОБНОВЛЕНИЯ объекта — передаются данные согласно ЧАСТИ СХЕМЫ данных сущности.
Например, отредактировать комментарий на форуме:
PUT forum.com/threads/gameofthrones/messages/abc098zx12
{"visibleOnlyForFriends": true}
В данном примере, PUT вы можете делать хоть 500 раз, в нашем примере — форумный пост всё равно будет один. Это свойство называется идемпотентностью. Изменится лишь указанный в теле запроса параметр комментарий.
DELETE применяется для запроса по заданному адресу с указанием (идентификатора, id) уже существующего объекта данных (сущности) на сервере. Чаще всего для УДАЛЕНИЯ объекта.
Например, удалить комментарий на форуме:
DELETE forum.com/threads/gameofthrones/messages/abc098zx12
HTTP | CRUD | Ответы для всей коллекции (/customers) |
Ответы для конкретного ID (/customers/{id}) |
Примеры запросов |
---|---|---|---|---|
POST | Create | 201 (Created), 'Location' header со ссылкой на /customers/{id} содержащей новый ID | 404 (Not Found), 409 (Conflict) если ресурс уже существует |
POST http://site.com/customers
POST http://site.com/customers/123/orders
|
GET | Read | 200 (OK), список Клиентов | 200 (OK). 404 (Not Found) если ID не найден или неправилен |
GET http://site.com/customers/123
GET http://site.com/customers/123/orders
|
PUT | Update /Replace |
405 (Method Not Allowed), разве только вы не захотите обновить/заменить каждый ресурс во всей коллекции | 200 (OK) или 204 (No Content). 404 (Not Found) если ID не найден или неправилен |
PUT http://site.com/customers/123
PUT http://site.com/customers/123/orders/98765
|
PATCH | Update /Modify |
405 (Method Not Allowed), раазве только вы не заходите изменить саму коллекцию | 200 (OK) или 204 (No Content). 404 (Not Found) если ID не найден или неправилен |
PATCH http://site.com/customers/123
PATCH http://site.com/customers/123/orders/98765
|
DELETE | Delete | 405 (Method Not Allowed), разве только вы не захотите удалить всю коллекцию. | 200 (OK). 404 (Not Found) если ID не найден или неправилен |
DELETE http://site.com/customers/123
DELETE http://site.com/customers/123/orders
|
HEAD | ||||
OPTIONS | ||||
TRACE | ||||
CONNECT |
REST (Representational State Transfer — "передача репрезентативного состояния") = архитектурный стиль построения распределённых приложений, имеющий 6 ограничений, дающих (по заявлению автора) большую производительность и масштабируемость системы.
Ограничения, соблюдение которых дают веб-сервису "право" называться RESTful: