[API, Flask, Python] Что такое REST API
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Если говорить отдаленно, то REST API нужен для создания сайта. Но ведь для этого много чего нужно (скажете Вы) — в какой же части REST API?
Frontend и Backend
Начнем по порядку. Что такое frontend и backend? У сайта есть две стороны: лицевая и внутренняя соответственно. Первая обычно отвечает за визуальное расположение объектов на странице (где какие картинки, где какой текст и где какие кнопочки). Вторая отвечает за “действия”. Обычно это нажатия на те самые кнопочки или на другие “штуки” на сайте. Например, Вы заходите на страницу вашей любимой социальной сети и для начала Вам нужно войти в аккаунт. С лицевой стороны (frontend) Вы вводите логин и пароль и нажимаете кнопку “Войти”. В это время запрос отправляется в базу данных для проверки наличия такого пользователя, и в случае успеха, Вы попадаете в социальную сеть под своим аккаунтом, а в противном случае, Вы увидите сообщение об ошибке. В данном случае, за отправку запроса в базу данных по сути и отвечает backend сторона. Обычно ее разделяют на три подчасти:
- Web API для приема запросов
- Бизнес-логика для обработки запросов
- Взаимодействие с базой данных
В этой статье мы поговорим в основном про API или Application Programming Interface и немного про бизнес-логику. Но для начала создадим сервер.
Создание собственного сервера
Так выглядит простейшее серверное приложение на python с использованием фреймворка flask:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "Hello, World!"
app.run()
Здесь уже есть один пустой роут (“/”) и если запустить это приложение и открыть браузер на странице 127.0.0.1:5000, то Вы увидете надпись “Hello, World!”. Со стороны сервера, Вы увидите такое сообщение:
127.0.0.1 — - [07/Aug/2020 20:32:16] «GET / HTTP/1.1» 200 — Таким образом, переходя в браузере (клиенте) по данной ссылке, мы делаем GET-запрос на наш сервер и попадаем в функцию index — отсюда и берется “Hello, World!”. Можно добавлять и другие запросы (гораздо более сложные) по другим роутам (или необязательно). Как я сказал, в данном случае у нас использовался GET-запрос — стандартный по умолчанию. Но существует и множество других, самые популярные из которых — POST, PUT, DELETE. Но зачем это нужно?
Create Read Update Delete
Во-первых, REST расшифровывается как REpresentational State Transfer (или, по-простому, РЕпрезентативная передача состояния). По факту само определение REST не так важно, но его обычно связывают с другой аббревиатурой — CRUD — Create Read Update Delete. В самом начале я приводил пример, связанный с базой данных и эти четыре операции — неотъемлемая часть работы с ней (ну или просто с данными).
Во-вторых, REST или RESTfull API должны поддерживать обработку этих четырех действий. Здесь нам как раз и пригодятся методы GET, POST, PUT, DELETE. Как правило (не обязательно!) метод POST используется для добавления новых данных (Create), GET — для чтения (Read), PUT — для обновления существующих данных (Update) и DELETE соответственно для удаления (Delete). Например, то же самое приложение на flask можно переделать так:
from flask import Flask, request
app = Flask(__name__)
@app.route("/", methods=["POST", "GET", "PUT", "DELETE"])
def index():
if request.method == "POST":
# добавить новые данные
if request.method == "GET":
# отдать данные
if request.method == "PUT":
# обновить данные
if request.method == "DELETE":
# удалить данные
app.run()
Это и есть примитивный REST API. Frontend сторона теперь может посылать запросы и, в зависимости от их типа, мы будем производить дальнейшие действия.
Работа с данными
Наше текущее приложение совсем неинтересное — хорошо бы поработать с какими-нибудь данными. Для этого надо подумать, как их передавать. Самый популярный способ JSON-формат (но можно использовать и другие, например, XML). Он представляет из себя аналог словаря в python и очень удобен в использовании. Я буду использовать примитивные данные для примера с авторизацией в социальной сети:
data = {
1: {
"login": "login1",
"password": "Qwerty1"},
2: {
"login": "login2",
"password": "Ytrewq2"}
}
У нас есть data, в которой пока что два пользователя (login1 и login2) и мы будем эту дату CRUD’ить. Стоит сказать, что все четыре метода редко когда работают на одном и том же роуте и обычно делают так: для методов GET (выдать всех пользователей) и POST используется роут, например, “/users”, а для методов GET (выдать одного пользователя по его id), PUT и DELETE “/users/id”. Также необходимо заметить, что для обновления и создания новых пользователей к нам приходят данные о них в теле запроса (request.json). Теперь нашу программу можно переписать следующим образом:
from flask import Flask, request
app = Flask(__name__)
data = {
1: {
"login": "login1",
"password": "Qwerty1"},
2: {
"login": "login2",
"password": "Ytrewq2"}
}
@app.route("/users", methods=["POST", "GET"])
def work_with_users():
if request.method == "POST":
data[max(data.keys())+1] = request.json
return {"message": "User was created"}, 201
if request.method == "GET":
return data, 200
@app.route("/users/<int:user_id>", methods=["GET", "PUT", "DELETE"])
def work_with_user_by_id(user_id):
if request.method == "GET":
return data[user_id], 200
if request.method == "PUT":
data[user_id]["login"] = request.json["login"]
data[user_id]["password"] = request.json["password"]
return {"message": "User was updated"}, 200
if request.method == "DELETE":
data.pop(user_id)
return {"message": "User was deleted"}, 200
app.run()
Для тестирования запросов существует множество программ (Postman, Fiddler, Insomnia...) и я рекомендую ознакомиться с одной из них (лично мне больше всего нравится Postman). С их помощью можно посмотреть, что приходит в результате запроса и с каким статус-кодом (числа 200/201 в return’ах). А также можно инсценировать отправку данных, добавляя их в тело запроса.
Стоит также заметить, что в настоящее время такой подход не используется, а обычно применяют библиотеку flask-restplus (или пришедшую ей на смену flask-restx), но я считаю, что для начала нужно познакомиться с чистым flask. Также необходимо проверять наличие данных и их корректность и предусмотреть возврат ошибки в противных случаях.
Заключение
REST API — это просто методы CRUD, к которым обращается клиентская сторона сайта по определенным роутам. На слух и взгляд, возможно, это воспринимается трудно, так что я рекомендую написать собственный сервер по аналогии с примером. Лично я считаю flask одним из самых простых фреймворков для этого, и, если Вы новичок, то я советую попробовать именно его.
===========
Источник:
habr.com
===========
Похожие новости:
- [Финансы в IT] Инвестируй как Гейтс: в какие акции вкладывается фонд основателя Microsoft
- [Информационная безопасность, Реверс-инжиниринг] Руткиты на основе BIOS. Часть 2 (перевод)
- [Python, API, Математика] Калькулятор Wolframalpha в диалоге Telegram
- [Python, Программирование, Разработка под Windows] Создание голосового ассистента на Python, часть 1
- [Python, Проектирование и рефакторинг] CLI приложение + Dependency Injector — руководство по применению dependency injection + Вопросы / ответы
- [Python, Data Mining, Natural Language Processing] Обзор методов создания эмбедингов предложений, Часть2
- [Разработка под Windows] Создаем EXE
- [Интерфейсы, Usability, Звук] Впихнуть невпихуемое
- [Python, Data Mining, Natural Language Processing] Обзор методов создания эмбедингов предложений, Часть 1
- [Системы обмена сообщениями, API, R, Data Engineering] Пишем telegram бота на языке R (часть 1): Создаём бота, и отправляем с его помощью сообщения в telegram
Теги для поиска: #_api, #_flask, #_python, #_rest, #_rest_api, #_python, #_flask, #_crud_restful_api, #_api, #_flask, #_python
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 15:23
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Если говорить отдаленно, то REST API нужен для создания сайта. Но ведь для этого много чего нужно (скажете Вы) — в какой же части REST API? Frontend и Backend Начнем по порядку. Что такое frontend и backend? У сайта есть две стороны: лицевая и внутренняя соответственно. Первая обычно отвечает за визуальное расположение объектов на странице (где какие картинки, где какой текст и где какие кнопочки). Вторая отвечает за “действия”. Обычно это нажатия на те самые кнопочки или на другие “штуки” на сайте. Например, Вы заходите на страницу вашей любимой социальной сети и для начала Вам нужно войти в аккаунт. С лицевой стороны (frontend) Вы вводите логин и пароль и нажимаете кнопку “Войти”. В это время запрос отправляется в базу данных для проверки наличия такого пользователя, и в случае успеха, Вы попадаете в социальную сеть под своим аккаунтом, а в противном случае, Вы увидите сообщение об ошибке. В данном случае, за отправку запроса в базу данных по сути и отвечает backend сторона. Обычно ее разделяют на три подчасти:
В этой статье мы поговорим в основном про API или Application Programming Interface и немного про бизнес-логику. Но для начала создадим сервер. Создание собственного сервера Так выглядит простейшее серверное приложение на python с использованием фреймворка flask: from flask import Flask
app = Flask(__name__) @app.route("/") def index(): return "Hello, World!" app.run() Здесь уже есть один пустой роут (“/”) и если запустить это приложение и открыть браузер на странице 127.0.0.1:5000, то Вы увидете надпись “Hello, World!”. Со стороны сервера, Вы увидите такое сообщение: 127.0.0.1 — - [07/Aug/2020 20:32:16] «GET / HTTP/1.1» 200 — Таким образом, переходя в браузере (клиенте) по данной ссылке, мы делаем GET-запрос на наш сервер и попадаем в функцию index — отсюда и берется “Hello, World!”. Можно добавлять и другие запросы (гораздо более сложные) по другим роутам (или необязательно). Как я сказал, в данном случае у нас использовался GET-запрос — стандартный по умолчанию. Но существует и множество других, самые популярные из которых — POST, PUT, DELETE. Но зачем это нужно? Create Read Update Delete Во-первых, REST расшифровывается как REpresentational State Transfer (или, по-простому, РЕпрезентативная передача состояния). По факту само определение REST не так важно, но его обычно связывают с другой аббревиатурой — CRUD — Create Read Update Delete. В самом начале я приводил пример, связанный с базой данных и эти четыре операции — неотъемлемая часть работы с ней (ну или просто с данными). Во-вторых, REST или RESTfull API должны поддерживать обработку этих четырех действий. Здесь нам как раз и пригодятся методы GET, POST, PUT, DELETE. Как правило (не обязательно!) метод POST используется для добавления новых данных (Create), GET — для чтения (Read), PUT — для обновления существующих данных (Update) и DELETE соответственно для удаления (Delete). Например, то же самое приложение на flask можно переделать так: from flask import Flask, request
app = Flask(__name__) @app.route("/", methods=["POST", "GET", "PUT", "DELETE"]) def index(): if request.method == "POST": # добавить новые данные if request.method == "GET": # отдать данные if request.method == "PUT": # обновить данные if request.method == "DELETE": # удалить данные app.run() Это и есть примитивный REST API. Frontend сторона теперь может посылать запросы и, в зависимости от их типа, мы будем производить дальнейшие действия. Работа с данными Наше текущее приложение совсем неинтересное — хорошо бы поработать с какими-нибудь данными. Для этого надо подумать, как их передавать. Самый популярный способ JSON-формат (но можно использовать и другие, например, XML). Он представляет из себя аналог словаря в python и очень удобен в использовании. Я буду использовать примитивные данные для примера с авторизацией в социальной сети: data = {
1: { "login": "login1", "password": "Qwerty1"}, 2: { "login": "login2", "password": "Ytrewq2"} } У нас есть data, в которой пока что два пользователя (login1 и login2) и мы будем эту дату CRUD’ить. Стоит сказать, что все четыре метода редко когда работают на одном и том же роуте и обычно делают так: для методов GET (выдать всех пользователей) и POST используется роут, например, “/users”, а для методов GET (выдать одного пользователя по его id), PUT и DELETE “/users/id”. Также необходимо заметить, что для обновления и создания новых пользователей к нам приходят данные о них в теле запроса (request.json). Теперь нашу программу можно переписать следующим образом: from flask import Flask, request
app = Flask(__name__) data = { 1: { "login": "login1", "password": "Qwerty1"}, 2: { "login": "login2", "password": "Ytrewq2"} } @app.route("/users", methods=["POST", "GET"]) def work_with_users(): if request.method == "POST": data[max(data.keys())+1] = request.json return {"message": "User was created"}, 201 if request.method == "GET": return data, 200 @app.route("/users/<int:user_id>", methods=["GET", "PUT", "DELETE"]) def work_with_user_by_id(user_id): if request.method == "GET": return data[user_id], 200 if request.method == "PUT": data[user_id]["login"] = request.json["login"] data[user_id]["password"] = request.json["password"] return {"message": "User was updated"}, 200 if request.method == "DELETE": data.pop(user_id) return {"message": "User was deleted"}, 200 app.run() Для тестирования запросов существует множество программ (Postman, Fiddler, Insomnia...) и я рекомендую ознакомиться с одной из них (лично мне больше всего нравится Postman). С их помощью можно посмотреть, что приходит в результате запроса и с каким статус-кодом (числа 200/201 в return’ах). А также можно инсценировать отправку данных, добавляя их в тело запроса. Стоит также заметить, что в настоящее время такой подход не используется, а обычно применяют библиотеку flask-restplus (или пришедшую ей на смену flask-restx), но я считаю, что для начала нужно познакомиться с чистым flask. Также необходимо проверять наличие данных и их корректность и предусмотреть возврат ошибки в противных случаях. Заключение REST API — это просто методы CRUD, к которым обращается клиентская сторона сайта по определенным роутам. На слух и взгляд, возможно, это воспринимается трудно, так что я рекомендую написать собственный сервер по аналогии с примером. Лично я считаю flask одним из самых простых фреймворков для этого, и, если Вы новичок, то я советую попробовать именно его. =========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 15:23
Часовой пояс: UTC + 5