HTTP(HyperText Transfer Protocol) - является протоколом клиент-серверного взаимодействия без сохранения промежуточного состояния. В роли клиента чаще всего выступает веб-браузер. Для обмена информацией протокол HTTP в большинстве случаев использует TCP/IP.
HTTP(Hypertext Transfer Protocol) - протокол прикладного уровня передачи данных, изначально — в виде гипертекстовых документов в формате HTML, в настоящее время используется для передачи произвольных данных. Если не указывать порт будет использован стандартный - "80".
HTTPS(HyperText Transfer Protocol Secure) - расширение протокола HTTP для поддержки шифрования в целях повышения безопасности. Данные в протоколе HTTPS передаются поверх криптографических протоколов TLS или устаревшего в 2015 году SSL. Если не указывать порт будет использован стандартный - "443". Для проверки качества TLS/SSL защиты можно использовать ресурс "ssllabs.com/ssltest/index.html"
Значение header не может быть null.
GET и HEAD - кешируемые.
POST - по умолчанию не кэшируются, но можно кэшировать, если к ответу добавить заголовок Expires или заголовок Cache-Control с директивой, явно разрешающей кэширование.
REST(Representational State Transfer) - архитектурный стиль(набор правил, подход) для создания API в HTTP.
Пример корректного url: http://localhost:9999/restfulservices/v1/users/{id}
В url не должно быть глаголов.
Операция | URI | HTTP method | Status code | Тело ответа |
---|---|---|---|---|
Добавить элемент | POST/PUT | /products | 201 | Созданный элемент |
Получить элемент | GET | /products/{id} | 200 | Найденный элемент |
Получить все элементы | GET | /products | 200 | Найденные элементы |
Обновить часть данных элемента | PATCH | /products/{id} | 204/200(есть тело ответа) | Обновленный элементы |
Обновить все данные элемента | PUT | /products/{id} | 200 | Обновленный элементы |
Удалить элемент | DELETE | /products/{id} | 204/200(есть тело ответа, не рекомендуется.) | - |
Robustness principle - принцип объясняющий почему лучше не делать проверку на строгую схему протокола передачи. Коротко в запросе могут быть другие параметры которые будут проигнорированы системой. Коротко - не нужно проверять JSON на отсутствие других полей. Убирает необходимость синхронизировать релизы зависимых сервисов.
Идемпотентность(Idempotency) - это запрос, который выполняется всегда с одним эффектом, но ответ на запрос может быть разный. Пример "DELETE" первый запрос возвращает 200, а последующие 404. Не идемпотентный HTTP метод - POST.
Сеанс (сессия) – соединение между клиентом и сервером, устанавливаемое на определенное время, за которое клиент может отправить на сервер сколько угодно запросов. Так как при посещении клиентом Web-ресурса и выполнении вариантов запросов, контекстная информация о клиенте не хранится(stateless). В протоколе HTTP нет возможностей для сохранения и изменения информации о предыдущих посещениях клиента. Каждый клиент устанавливает с сервером свой собственный сеанс. Сеансы используются для обеспечения хранения данных во время нескольких запросов Web-страницы или на обработку информации, введенной в пользовательскую форму в результате нескольких HTTP-соединений.
Данные получаются и сохраняются в сессии при помощи соответствующего "ключа".
Контейнер сервлетов при любом запросе проверяет, есть ли в запросе параметр ID сессии. Если Да(например, клиент первый раз обращается к серверу), тогда контейнер сервлетов создает новый объект HttpSession, а также присваивает ему уникальный ID. Объект сессии сохраняется на сервере, а ID отправляется в ответе клиенту и по умолчанию сохраняется на клиенте в куках. Затем, когда приходит новый запрос от того же клиента, то контейнер сервлетов достает из него ID, и по этому ID находит правильный объект HttpSession на сервере.
Получить объект сессии можно из запроса (объект HttpServletRequest), у которого нужно вызвать метод getSession(). Он возвращает объект HttpSession.
Способы обеспечения уникального идентификатора сессии:
Webhook - способ оповещения клиента о событиях с помощью пользовательских обратных вызовов по HTTP.
HTTP POST запрос. Иногда GET.
Основной формат - JSON.
В основной, клиент сам указывает адрес на котором будет ожидать ответ.
API - требует постоянных вызовов для обновления информации, а Webhook пришлет информацию когда она будет готова.