Русский
Русский
English
Статистика
Реклама

Из песочницы Что такое REST API

Если говорить отдаленно, то REST API нужен для создания сайта. Но ведь для этого много чего нужно (скажете Вы) в какой же части REST API?

Frontend и Backend


Начнем по порядку. Что такое frontend и backend? У сайта есть две стороны: лицевая и внутренняя соответственно. Первая обычно отвечает за визуальное расположение объектов на странице (где какие картинки, где какой текст и где какие кнопочки). Вторая отвечает за действия. Обычно это нажатия на те самые кнопочки или на другие штуки на сайте. Например, Вы заходите на страницу вашей любимой социальной сети и для начала Вам нужно войти в аккаунт. С лицевой стороны (frontend) Вы вводите логин и пароль и нажимаете кнопку Войти. В это время запрос отправляется в базу данных для проверки наличия такого пользователя, и в случае успеха, Вы попадаете в социальную сеть под своим аккаунтом, а в противном случае, Вы увидите сообщение об ошибке. В данном случае, за отправку запроса в базу данных по сути и отвечает backend сторона. Обычно ее разделяют на три подчасти:

  1. Web API для приема запросов
  2. Бизнес-логика для обработки запросов
  3. Взаимодействие с базой данных

В этой статье мы поговорим в основном про API или Application Programming Interface и немного про бизнес-логику. Но для начала создадим сервер.

Создание собственного сервера


Так выглядит простейшее серверное приложение на python с использованием фреймворка flask:

from flask import Flaskapp = 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, requestapp = 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, requestapp = 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"}, 200app.run()

Для тестирования запросов существует множество программ (Postman, Fiddler, Insomnia...) и я рекомендую ознакомиться с одной из них (лично мне больше всего нравится Postman). С их помощью можно посмотреть, что приходит в результате запроса и с каким статус-кодом (числа 200/201 в returnах). А также можно инсценировать отправку данных, добавляя их в тело запроса.

Стоит также заметить, что в настоящее время такой подход не используется, а обычно применяют библиотеку flask-restplus (или пришедшую ей на смену flask-restx), но я считаю, что для начала нужно познакомиться с чистым flask. Также необходимо проверять наличие данных и их корректность и предусмотреть возврат ошибки в противных случаях.

Заключение


REST API это просто методы CRUD, к которым обращается клиентская сторона сайта по определенным роутам. На слух и взгляд, возможно, это воспринимается трудно, так что я рекомендую написать собственный сервер по аналогии с примером. Лично я считаю flask одним из самых простых фреймворков для этого, и, если Вы новичок, то я советую попробовать именно его.
Источник: habr.com
К списку статей
Опубликовано: 14.08.2020 18:11:43
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Api

Flask

Python

Rest

Rest api

Crud restful api

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru