Евгений Колесников 3 vuotta sitten
vanhempi
sitoutus
93eddbce59
1 muutettua tiedostoa jossa 64 lisäystä ja 2 poistoa
  1. 64 2
      articles/api_php.md

+ 64 - 2
articles/api_php.md

@@ -97,15 +97,77 @@ Content-Language: ru
 
 Тело HTTP-сообщения (message-body), если оно присутствует, используется для передачи тела объекта, связанного с запросом или ответом.
 
-## Языки для разработки WEB-серверов
+## REST API 
+
+Это способ взаимодействия сайтов и веб-приложений с сервером. Его также называют RESTful.
+
+Термин состоит из двух аббревиатур, которые расшифровываются следующим образом. API (Application Programming Interface) — это код, который позволяет двум приложениям обмениваться данными с сервера. На русском языке его принято называть программным интерфейсом приложения. REST (Representational State Transfer) — это способ создания API с помощью протокола HTTP. На русском его называют «передачей состояния представления».
+
+Технологию REST API применяют везде, где пользователю сайта или веб-приложения нужно предоставить данные с сервера. Например, при нажатии иконки с видео на видеохостинге REST API проводит операции и запускает ролик с сервера в браузере. В настоящее время это самый распространенный способ организации API. Он вытеснил ранее популярные способы SOAP и WSDL.
+
+У RESTful нет единого стандарта работы: его называют «архитектурным стилем» для операций по работе с серверов. 
+
+### Принципы REST API
+
+У RESTful есть 7 принципов написания кода интерфейсов.
+
+**Отделения клиента от сервера (Client-Server)**. Клиент — это пользовательский интерфейс сайта или приложения, например, поисковая строка видеохостинга. В REST API код запросов остается на стороне клиента, а код для доступа к данным — на стороне сервера. Это упрощает организацию API, позволяет легко переносить пользовательский интерфейс на другую платформу и дает возможность лучше масштабировать серверное хранение данных.
+
+**Отсутствие записи состояния клиента (Stateless)**. Сервер не должен хранить информацию о состоянии (проведенных операций) клиента. Каждый запрос от клиента должен содержать только ту информацию, которая нужна для получения данных от сервера.
+
+**Кэшируемость (Casheable)**. В данных запроса должно быть указано, нужно ли кэшировать данные (сохранять в специальном буфере для частых запросов). Если такое указание есть, клиент получит право обращаться к этому буферу при необходимости.
+
+**Единство интерфейса (Uniform Interface)**. Все данные должны запрашиваться через один URL-адрес стандартными протоколами, например, HTTP. Это упрощает архитектуру сайта или приложения и делает взаимодействие с сервером понятнее.
+
+**Многоуровневость системы (Layered System)**. В RESTful сервера могут располагаться на разных уровнях, при этом каждый сервер взаимодействует только с ближайшими уровнями и не связан запросами с другими.
+
+**Предоставление кода по запросу (Code on Demand)**. Серверы могут отправлять клиенту код (например, скрипт для запуска видео). Так общий код приложения или сайта становится сложнее только при необходимости.
+
+**Начало от нуля (Starting with the Null Style)**. Клиент знает только одну точку входа на сервер. Дальнейшие возможности по взаимодействию обеспечиваются сервером.
+
+### Стандарты
+
+Сам по себе **RESTful** не является стандартом или протоколом. Разработчики руководствуются принципами REST API для создания эффективной работы с сервером для своих сайтов и приложений. Принципы позволяют выстраивать серверную архитектуру с помощью других протоколов: HTTP, URL, JSON и XML.
+
+Это отличает REST API от метода простого протокола доступа к объектам SOAP (Simple Object Access Protocol), созданного Microsoft в 1998 году. В SOAP взаимодействие по каждому протоколу нужно прописывать отдельно только в формате XML. Также в SOAP нет кэшируемости запросов, более объемная документация и реализация словаря, отдельного от HTTP. Это делает стиль REST API более легким в реализации, чем стандарт SOAP.
+
+Несмотря на отсутствие стандартов, при создании REST API есть общепринятые лучшие практики, например:
+
+* использование защищенного протокола HTTPS
+* использование инструментов для разработки API Blueprint и Swagger
+* применение приложения для тестирования Get Postman
+* применение как можно большего количества HTTP-кодов (список)
+* архивирование больших блоков данных
+
+### Архитектура
+
+REST API основывается на протоколе передачи гипертекста HTTP (Hypertext Transfer Protocol). Это стандартный протокол в интернете, созданный для передачи гипертекста. Сейчас с помощью HTTP отправляют любые другие типы данных.
+
+Каждый объект на сервере в HTTP имеет свой уникальный URL-адрес в строгом последовательном формате. Например, второй модуль обучающего видео про Python будет храниться на сервере по адресу `http://school.ru/python/2`.
+
+В REST API есть 4 метода HTTP, которые используют для действий с объектами на серверах:
+
+* GET (получение информации о данных или списка объектов)
+* DELETE (удаление данных)
+* POST (добавление или замена данных)
+* PUT (регулярное обновление данных)
+
+Такие запросы еще называют идентификаторами **CRUD**: create (создать), read (прочесть), update (обновить) delete (удалить). Это стандартный набор действий для работы с данными. Например, чтобы обновить видео про Python по адресу `http://school.ru/python/2` REST API будет использовать метод PUT, а для его удаления — DELETE.
+
+В каждом HTTP-запросе есть заголовок, за которым следует описание объекта на сервере — это и есть его состояние.
+
+## Языки программирования для разработки WEB-серверов
 
 В принципе WEB-сервер можно написать на любом языке. Но удобнее разрабатывать сервер на тех языках, где есть нативная (на уровне языка) или внешняя (с помощью подключаемых модулей) поддержка HTTP-протокола.
 
 К таким относятся (список не полный, тут только то с чем я сам работал или "на слуху"):
 
 * **PHP** - скриптовый язык общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков, применяющихся для создания динамических веб-сайтов. В своем составе имеет библиотеки для работы с базами данных, поэтому его мы в дальнейшем и будем изучать.
+
 * **Java** -  строго типизированный объектно-ориентированный язык программирования общего назначения.
-* **Node или Node.js** - программная платформа, основанная на движке V8 (транслирующем JavaScript в машинный код), превращающая JavaScript из узкоспециализированного языка в язык общего назначения. Node.js добавляет возможность JavaScript взаимодействовать с устройствами ввода-вывода через свой API, написанный на C++, подключать другие внешние библиотеки, написанные на разных языках, обеспечивая вызовы к ним из JavaScript-кода. Node.js применяется преимущественно на сервере, выполняя роль веб-сервера. Сервер для проекта `cinema.kolei.ru` написан на этом языке и код, если интересно, можно [посмотреть](../cinema/index.js) в этом репозитории в каталоге `cinema`.
+
+* **Node или Node.js** - программная платформа, основанная на движке V8 (транслирующем JavaScript в машинный код), превращающая JavaScript из узкоспециализированного языка в язык общего назначения. **Node.js** добавляет возможность JavaScript взаимодействовать с устройствами ввода-вывода через свой API, написанный на C++, подключать другие внешние библиотеки, написанные на разных языках, обеспечивая вызовы к ним из JavaScript-кода. **Node.js** применяется преимущественно на сервере, выполняя роль веб-сервера. Сервер для проекта `cinema.kolei.ru` написан на этом языке и код, если интересно, можно [посмотреть](../cinema/index.js) в этом репозитории в каталоге `cinema`.
+
 * **Python** - (в русском языке встречаются названия пито́н или па́йтон) — высокоуровневый язык программирования общего назначения с динамической строгой типизацией.
 
 ## Синтаксис PHP