rest api python что это

Django REST Framework: REST API на Python с нуля

rest api python что это. Смотреть фото rest api python что это. Смотреть картинку rest api python что это. Картинка про rest api python что это. Фото rest api python что это

1. Знакомство с REST

Термин REST API расшифровывается как Representational State Transfer Application Programming Interface. Следовательно, RESTful API — это программный интерфейс приложения, соответствующий ограничениям архитектурного стиля REST.

REST — не протокол и не стандарт. Это, как уже было сказано, архитектурное ограничение. Чтобы API считался RESTful, он должен соответствовать следующим критериям.

Благодаря вышеперечисленным архитектурным правилам REST API масштабируемый, переносимый и гибкий.

2. Что такое Django REST Framework?

Django — масштабируемый полнофункциональный веб-фреймворк, написанный на Python. Django берет на себя все хлопоты, зачастую связанные с веб-разработкой, такие как безопасность и доступ к базам данных.

Существует множество библиотек для Django, расширяющих его функционал. Одна из них, о которой мы поговорим сегодня, — это Django REST Framework или DRF, которая позволяет сериализовать данные из Django ORM через REST API.

Сериализация — это преобразование таблиц из базы данных в формат JSON.

Руководство написано для новичков, прошлый опыт работы с фреймворком Django не предполагается, так как вы многому научитесь прямо сейчас. Кроме того, в статье не будет обширного описания технических нюансов каждой операции. Рассматривайте руководство в качестве упражнения.

Давайте создадим сайт бронирования отелей! Исходный код и справка доступны на GitHub.

3. Установка Django

Прежде чем приступить непосредственно к работе с REST API, сделаем краткий экскурс в Django.

Источник

Создаем REST API в Python за пять минут

rest api python что это. Смотреть фото rest api python что это. Смотреть картинку rest api python что это. Картинка про rest api python что это. Фото rest api python что это

rest api python что это. Смотреть фото rest api python что это. Смотреть картинку rest api python что это. Картинка про rest api python что это. Фото rest api python что это

В этой статье мы рассмотрим новый фреймворк Arrested, который используется для создания REST API при помощи Python. Мы используем Docker, SQLAlchemy и прочие инструменты для создания API на тему Звездных Войн всего за пять минут!

Это первый пост в серии в будущей серии статей, нацеленных на помощь людям в построении REST API Python. Мы собрали коллекцию инструментов, которые помогут вам быстро начать и не слишком напрягаться на протяжении работы. В данном материале мы представим вам фреймворк Arrested, который используется для создания API при помощи Flask. Данный фреймворк нацелен сделать создание REST API безболезненным процессом. Подходит для быстрого использования в проектах, при этом легко расширяется для особых требований.

В данной статье мы рассмотрим

Список ресурсов инструментов, которые мы будем использовать

Мы используем Cookie Cutter для быстрого создания базовой структуры приложения и избегания всех скучных этапов перед созданием ресурса, который будет выдавать персонажей из нашей базы данных «Звездных Войн«. Если вы не хотите использовать Cookie Cutter, вы можете скачать готовую структуру здесь.

Источник

Работа с REST API на Python

Введение

В этой статье вы узнаете как писать запросы к REST API на Python 3.

Прежде чем что-то устанавливать убедитесь, что вы знакомы с работой в виртуальном окружении Python.

Прочитать об этом можно в статье «Виртуальные окружения в Python»

Подготовка

Активируйте ваше виртуальное окружение и установите requests командой

Изучите список установленных модулей

requests подтягивает за собой requests, certifi, chardet, idna, urllib3

Проверить куда установился requests в этом окружении можно командой

Name: requests Version: 2.24.0 Summary: Python HTTP for Humans. Home-page: https://requests.readthedocs.io Author: Kenneth Reitz Author-email: me@kennethreitz.org License: Apache 2.0 Location: /home/andrei/python/virtualenvs/answerit_env/lib/python3.8/site-packages Requires: certifi, chardet, urllib3, idna Required-by:

Чтобы сделать GET запрос достаточно импортировать requests и выполнить requests. get

Создайте файл rdemo.py следующего содержания:

import requests r = requests. get (‘https://xkcd.com/353/’) print (r)

Запустите скрипт командой

Если получили 200 значит всё хорошо. Изменим наш код, чтобы узнать, какие действия мы можем произвести с объектом

dir(r) выдаст список доступных атрибутов и методов

import requests r = requests. get (‘https://topbicycle.ru/b/stels_pilot_950_md_26.php’) print (dir(r))

[‘__attrs__’, ‘__bool__’, ‘__class__’, ‘__delattr__’, ‘__dict__’, ‘__dir__’, ‘__doc__’, ‘__enter__’, ‘__eq__’, ‘__exit__’, ‘__format__’, ‘__ge__’, ‘__getattribute__’, ‘__getstate__’, ‘__gt__’, ‘__hash__’, ‘__init__’, ‘__init_subclass__’, ‘__iter__’, ‘__le__’, ‘__lt__’, ‘__module__’, ‘__ne__’, ‘__new__’, ‘__nonzero__’, ‘__reduce__’, ‘__reduce_ex__’, ‘__repr__’, ‘__setattr__’, ‘__setstate__’, ‘__sizeof__’, ‘__str__’, ‘__subclasshook__’, ‘__weakref__’, ‘_content’, ‘_content_consumed’, ‘_next’, ‘apparent_encoding’, ‘close’, ‘connection’, ‘content’, ‘cookies’, ‘elapsed’, ‘encoding’, ‘headers’, ‘history’, ‘is_permanent_redirect’, ‘is_redirect’, ‘iter_content’, ‘iter_lines’, ‘json’, ‘links’, ‘next’, ‘ok’, ‘raise_for_status’, ‘raw’, ‘reason’, ‘request’, ‘status_code’, ‘text’, ‘url’]

Более подробную информацию можно получить заменив dir(r) на help(r)

Из этого документа можно узнать http статус содержится в атрибуте status_code

import requests r = requests. get (‘https://topbicycle.ru/b/stels_pilot_950_md_26.php’) print (r.status_code)

Если всё прошло успешно, то получите

ok вернёт True если ответ не 4XX или 5XX

headers возвращает заголовок ответа

Также из этого документа можно узнать что text возвращает содержимое ответа в формате unicode а content содержимое ответа в байтах

import requests r = requests. get (‘https://xkcd.com/353/’) print («content:») print («——«) print (r.content) print («——«) print («text:») print («——«) print (r.text)

Обычно content используют для работы с изображениями

Перейдите на TopBicycle.ru и найдите первое фото велосипеда.

Скопируйте его url

Теперь измените код так, чтобы сохранить изображение в файл

import requests r = requests. get ( https://topbicycle.ru/b/img/stels_pilot_950_MD_26.jpg» ) with open(«bike.jpg», «wb») as f: f.write(r.content)

Если всё прошло успешно, в вашей папке появится следующее фото

rest api python что это. Смотреть фото rest api python что это. Смотреть картинку rest api python что это. Картинка про rest api python что это. Фото rest api python что это

GET с параметрами

Для проверки ваших навыков работы с REST API можно воспользоваться сайтом httpbin.org

Он будет возвращать вам обратно ваш запрос.

Изменим код rdemo.py :

Параметры можно записать сразу после url за знаком вопроса, но надёжнее оформить их в виде отдельного словаря (dictionary).

Чтобы отправить и проверить POST запрос внесите небольшие изменения в код.

Очевидно, что GET нужно заменить на POST, также params нужно заменить на data

import requests payload = <'website': 'heihei.ru', 'established': 2018>r = requests. post (‘https://httpbin.org/post’, data= payload) print (f»url: \n\ntext: \n «)

В этом случае данные записываются в словарь и к ним очень легко обращаться.

Обратите внимание на «form» данные, которые были переданы возвращаются в этом поле.

Изменим код так, чтобы на экран выводились только эти данные

import requests payload = <'website': 'heihei.ru', 'established': 2018>r = requests. post (‘https://httpbin.org/post’, data= payload) r_dict = r. json () print (r_dict[‘form’])

Всё аналогично POST просто замените post на put

Рассмотрим пример, в котором нужно передать в теле запроса json, а также использовать имеющийся токен для авторизации

Обратите внимание на следующие моменты

Обработка ответа

Рассмотрим приёмы, которые пригодятся при работе с полученными данными

Предположим, получены данные в формате json.

Нужно извлечь из них токен, который хранится в access_token

Чтобы его получить, воспользуйтесь методом json() который возвращает словарь ( ).

И из этого словаря получите токен по ключевому слову access_token

r_dict = r.json() access_token = r_dict[ «access_token» ]

json.dumps

Если вы хотите сразу же изучить полученный json можно воспользоваться методом dumps()

Если вы получили не json а dict, json.dumps нужно использовать так:

sort_keys делать не обязательно. Это я для примера показываю, что можно отсортировтаь ключевые слова.

Вытащить часть ответа

Часто интерес бывает не весь ответ, а только часть. О том как её грамотно выделить из ответа читайте в статье

Аутентификация

Рассмотрим базовую аутентификацию на сайте httpbin

Придумайте любое имя пользоватлея и пароль к нему.

Я придумал andrey с паролем heihei

rest api python что это. Смотреть фото rest api python что это. Смотреть картинку rest api python что это. Картинка про rest api python что это. Фото rest api python что это

Введите ваши логин и пароль

rest api python что это. Смотреть фото rest api python что это. Смотреть картинку rest api python что это. Картинка про rest api python что это. Фото rest api python что это

Убедитесь, что аутентификация прошла успешно

rest api python что это. Смотреть фото rest api python что это. Смотреть картинку rest api python что это. Картинка про rest api python что это. Фото rest api python что это

Теперь проделаем такую же аутентификацию с помощью Python

Создайте файл auth_demo.py со следующим кодом

Ответ совпадает с тем что мы уже получали в браузере

Выполните такой же запрос, но с неправильным паролем. Убедитесь в том, что text ничего не содержит. Замените print (r.text) на print (r) и убедитесь, что полученный объект это

Задержка

Часто бывает нужно ограничить время ожидания ответа. Это можно сделать с помощью параметра timeout

Создайте файл timeout_demo.py следующего содержания

import requests r = requests. get (‘https://httpbin.org/delay/1’, timeout= 3) print (r)

Задержка равна одной секунде. А ждать ответ можно до трёх секунд.

Измените код так, чтобы ответ приходил заведомо позже чем наш таймаут в три секунды.

import requests r = requests. get (‘https://httpbin.org/delay/7’, timeout= 3) print (r)

Задержка равна семи секундам. А ждать ответ можно по-прежнему только до трёх секунд.

Traceback (most recent call last): File «/usr/lib/python3/dist-packages/urllib3/connectionpool.py», line 421, in _make_request six.raise_from(e, None) File » «, line 3, in raise_from File «/usr/lib/python3/dist-packages/urllib3/connectionpool.py», line 416, in _make_request httplib_response = conn.getresponse() File «/usr/lib/python3.8/http/client.py», line 1347, in getresponse response.begin() File «/usr/lib/python3.8/http/client.py», line 307, in begin version, status, reason = self._read_status() File «/usr/lib/python3.8/http/client.py», line 268, in _read_status line = str(self.fp.readline(_MAXLINE + 1), «iso-8859-1») File «/usr/lib/python3.8/socket.py», line 669, in readinto return self._sock.recv_into(b) File «/usr/lib/python3/dist-packages/urllib3/contrib/pyopenssl.py», line 326, in recv_into raise timeout(«The read operation timed out») socket.timeout: The read operation timed out During handling of the above exception, another exception occurred: Traceback (most recent call last): File «/usr/lib/python3/dist-packages/requests/adapters.py», line 439, in send resp = conn.urlopen( File «/usr/lib/python3/dist-packages/urllib3/connectionpool.py», line 719, in urlopen retries = retries.increment( File «/usr/lib/python3/dist-packages/urllib3/util/retry.py», line 400, in increment raise six.reraise(type(error), error, _stacktrace) File «/usr/lib/python3/dist-packages/six.py», line 703, in reraise raise value File «/usr/lib/python3/dist-packages/urllib3/connectionpool.py», line 665, in urlopen httplib_response = self._make_request( File «/usr/lib/python3/dist-packages/urllib3/connectionpool.py», line 423, in _make_request self._raise_timeout(err=e, url=url, timeout_value=read_timeout) File «/usr/lib/python3/dist-packages/urllib3/connectionpool.py», line 330, in _raise_timeout raise ReadTimeoutError( urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host=’httpbin.org’, port=443): Read timed out. (read timeout=3) During handling of the above exception, another exception occurred: Traceback (most recent call last): File «timeout_demo.py», line 4, in r = requests.get(‘https://httpbin.org/delay/7’, timeout=3) File «/usr/lib/python3/dist-packages/requests/api.py», line 75, in get return request(‘get’, url, params=params, **kwargs) File «/usr/lib/python3/dist-packages/requests/api.py», line 60, in request return session.request(method=method, url=url, **kwargs) File «/usr/lib/python3/dist-packages/requests/sessions.py», line 533, in request resp = self.send(prep, **send_kwargs) File «/usr/lib/python3/dist-packages/requests/sessions.py», line 646, in send r = adapter.send(request, **kwargs) File «/usr/lib/python3/dist-packages/requests/adapters.py», line 529, in send raise ReadTimeout(e, request=request) requests.exceptions.ReadTimeout: HTTPSConnectionPool(host=’httpbin.org’, port=443): Read timed out. (read timeout=3)

Источник

Проектирование RESTful API с помощью Python и Flask

В последние годы REST (REpresentational State Transfer) стала стандартной архитектурой при дизайне веб-сервисов и веб-API.

В этой статье я покажу вам как просто создавать RESTful веб-сервисы используя Python и микрофреймворк Flask.

Что такое REST?

Характеристика системы REST определяется шестью правилами дизайна:

Что такое RESTful веб-сервис?

Архитектура REST разработана чтобы соответствовать протоколу HTTP используемому в сети Интернет.

Центральное место в концепции RESTful веб-сервисов это понятие ресурсов. Ресурсы представлены URI. Клиенты отправляют запросы к этим URI используя методы представленные протоколом HTTP, и, возможно, изменяют состояние этих ресурсов.

Методы HTTP спроектированы для воздействия на ресурс стандартным способом:

Метод HTTPДействиеПример
GETПолучить информацию о ресурсеexample.com/api/orders
(получить список заказов)
GETПолучить информацию о ресурсеexample.com/api/orders/123
(получить заказ #123)
POSTСоздать новый ресурсexample.com/api/orders
(создать новый заказ из данных переданных с запросом)
PUTОбновить ресурсexample.com/api/orders/123
(обновить заказ #123 данными переданными с запросом)
DELETEУдалить ресурсexample.com/api/orders/123
(удалить заказ #123)

Дизайн REST не дает рекомендаций каким конкретно должен быть формат данных передаваемых с запросами. Данные переданные в теле запроса могут быть JSON blob, или с помощью аргументов в URL.

Проектируем простой веб-сервис

При проектировании веб-сервиса или API нужно определить ресурсы, которые будут доступны и запросы, с помощью которых эти данные будут доступны, согласно правил REST.

Допустим мы хотим написать приложение To Do List и мы должны спроектировать веб-сервис для него. Первое что мы должны сделать, это придумать кореневой URL для доступа к этому сервису. Например мы могли бы придумать в качестве корневого URL что-то типа:

Здесь я решил включить в URL имя приложения и версию API. Добавление имени приложения в URL это хороший способ разделить между собой сервисы запущенные на одном сервере. Добавление версии API в URL может помочь, если вы захотите сделать обновление в будущем и внедрить в новой версии несовместимые функции и не хотите ломать работающие приложения которые работают на старом API.

Следующим шагом мы должны выбрать ресурсы, которые будут доступны через наш сервис. У нас очень простое приложение, у нас есть только задачи, поэтому нашими ресурсами могут быть только задачи из нашего ToDo листа.

Для доступа к ресурсам будем использовать следующие методы HTTP:

Метод HTTPURIДействие
GEThttp://[hostname]/todo/api/v1.0/tasksПолучить список задач
GEThttp://[hostname]/todo/api/v1.0/tasks/[task_id]Получить задачу
POSThttp://[hostname]/todo/api/v1.0/tasksСоздать новую задачу
PUThttp://[hostname]/todo/api/v1.0/tasks/[task_id]Обновить существующую задачу
DELETEhttp://[hostname]/todo/api/v1.0/tasks/[task_id]Удалить задачу

Наша задача будет иметь следующие поля:

На этом мы заканчиваем часть посвященную дизайну нашего сервиса. Осталось только реализовать это!

Краткое введение в микрофреймворк Flask

Если вы читали серию Мега-Учебник Flask, вы знаете что Flask это простой и достаточно мощный веб-фреймворк на Python.

Прежде чем мы углубимся в специфику веб-сервисов, давайте рассмотрим как обычно реализованы приложения Flask.

Я предполагаю, что вы знакомы с основами работы с Python на вашей платформе. В примерах я буду использовать Unix-подобную операционную систему. Короче говоря, это озночает, что они будут работать на Linux, MacOS X и даже на Windows, если вы будете использовать Cygwin. Команды будут несколько отличаться, если вы будете использовать нативную версию Python для Windows.

Теперь, когда Flask установлен давайте создадим простое веб приложение, для этого поместим следующий код в app.py :

Чтобы запустить приложение, мы должны запустить app.py :

Теперь вы можете запустить веб-браузер из набрать http://localhost:5000 чтобы увидеть наше маленькое приложение в действии.

Просто, не так ли? Теперь мы будем конвертировать наше приложение в RESTful сервис!

Реализация RESTful сервиса на Python и Flask

Создание веб-сервиса на Flask удивительно просто, гораздо проще, чем строить полноценные серверные приложения, вроде того, которое мы делали в серии Мега-Туториал.

Есть пара хороших расширений для Flask, которые могут облегчить создание RESTful сервисов, но наша задача настолько просто, что использование расширений будет излишним.

Клиенты нашего веб-сервиса будут просить сервис добавлять, удалять и модифицировать задачи, поэтому нам нужен простой способ хранить задачи. Очевидный способ сделать это — сделать небольшую базу данных, но, поскольку база данных выходи за рамки темы статьи, мы сделаем всё гораздо проще. Чтобы больше узнать о правильном использовании БД с Flask я снова рекомендую почитать мой Мега-Туториал.

Вместо базы данных мы будем хранить список наших задач в памяти. Это сработает, только если мы будем работать с сервером в один поток и в один процесс. Хоть для development-сервера это нормально, то для production-сервера это будет очень плохой идеей и будет лучше подумать об использовании базы данных.

Сейчас мы готовы реализовать первую точку входа в наш веб-сервис:

Как вы можете видеть, изменилось немногое. Мы создали в памяти задачи, которые являются не более чем простым массивом словарей. Каждая запись в массиве имеет все поля, которые мы определили выше для наших задач.

Вместо текста наша функция отдает JSON, в который Flask с помощью метода jsonify кодирует нашу структуру данных.

Использование веб-браузера, для тестирования веб-сервиса, не самая лучшая идея, т.к. с помощью веб-браузера не так просто генерировать все типы HTTP-запросов. Вместо этого мы будем использовать curl. Если curl у вас не установлен, лучше сделать это прямо сейчас.

Мы просто вызвали функцию нашего RESTful сервиса!

Сейчас давайте напишем вторую версию метода GET для наших задач. Если вы взгляните на таблицу выше, то следующим будет метод, который возвращает данные из одной задачи:

С этим аргументом мы ищем нашу задачу в базе. Если полученный id не найдется в базе, мы вернем ошибку 404, которая по спецификации HTTP означает «Resource Not Found».

Если задача будет найдена, мы просто упакуем ее в JSON с помощью функции jsonify и отправим как ответ, так же как поступали раньше, отправляя коллекцию.

Вот так выглядит действие этой функции, когда мы вызываем ее с помощью curl :

Когда мы запросили ресурс с id #2 мы получили его, но вместо ресурса с id #3 мы получили ошибку 404. Такую странную ошибку внутри HTML вместо JSON мы получили, потому, что Flask по умолчанию генерирует страницу с ошибкой 404. Так как это клиентские приложения будут всегда ожидать он нашего сервера JSON, то нам нужно изменить это поведение:

Так мы получим более соответствующий нашему API ответ:

Чтобы протестировать новую функцию мы используем следующую команду curl :

Примечание: если у вас Windows и вы используете Cygwin версию curl из bash тогда вышеописанная команда сработает как надо. Если вы используете нативную версию curl из обычно командной строки, то придется немного подшаманить с двойными кавычками:

В Windows вы используете двойные кавычки чтобы отделить тело запроса, и внутри запроса двойные кавычки чтобы экранировать третю кавычку.

Конечно, после выполнения этого запроса мы можем получим обновленный список задач:

Оставшиеся две функции нашего веб-сервиса будут выглядеть так:

Функция delete_task без сюрпризов. Для функции update_task мы стараемся предотвратить ошибки делая тщательную проверку входных аргументов. Мы должны убедиться, что предоставленные клиентом данные в надлежащем формате, прежде чем запишем их в базу.

Вызов функци обновляющей задачу с id #2 будет выглядеть примерно так:

Улучшаем интерфейс нашего сервиса

Сейчас основная проблема дизайна нашего сервиса в том, что клиенты вынуждены строить URI самостоятельно исходя из ID задач. Этот легко, но дает знание клиенту как строятся URI для доступа к данным, что может помешать в будущем, если мы захотим внести изменения в URI.

Вместо id задачи мы вернем полный URI, через который будет осуществляться выполнение всех действий с задачей. Для этого мы напишем маленькую функцию-хелпер, которая будет генерировать «публичную» версию задачи, отправляемую клиенту:

Когда мы возвращаем список задач мы прогоняем все задачи через эту функцию, прежде чем отослать клиенту:

Теперь клиент получает вот такой список задач:

Применив эту технику к остальным функциям мы сможем гарантировать, что клиент всегда получит URI, вместо id.

Защита RESTful веб-сервиса

Вы думали мы уже закончили? Конечно, мы закончили с функциональностью нашего сервиса, но у нас есть проблема. Наш сервис открыт для всех, а это не очень хорошо.

У нас есть законченый веб-сервис, который управляет нашим списком дел, но сервис, в текущем его состоянии, доступен каждому. Если незнакомец выяснит как работает наше API он или она может написать новый клиент и навести беспорядок в наших данных.

Многие руководства для начинающих игнорируют безопасность и заканчиваются здесь. По-моему это серьезная проблема, которая всегда должна быть решена.

Простой путь защитить наш веб-сервис это пускать клиентов после авторизации по логину и паролю. В обычном веб-приложении вы должны сделать форму логина, которая отправляет данные авторизации, сервер обрабатывает их и делает новую сессию, а браузер пользователя получает куки с идентификатором сессии. К сожаление здесь мы такое сделать не можем, stateless — одно из правил построения REST веб-сервисов и мы должны просить клиентов отправлять свои регистрационные данные при каждом запросе.

С REST мы всегда стараемся придерживаться протокола HTTP настолько, насколько сможем. Сейчас нам нужно реализовать аутентификацию пользователя в контексте HTTP, который предоставляет нам 2 варианта — Basic и Digest.

Существует маленькое расширение Flask написанное вашим покорным слугой. Давайте установим Flask-HTTPAuth:

Функция get_password будет по имени пользователя возвращать пароль. В более сложных системах такая функцию должна будет лезть в базу, но для одного пользователя это не обязательно.

Функция error_handler будет использоваться чтобы отправить ошибку авторизации, при неправильных данных. Так же как мы поступили с другими ошибками мы должны настроить функцию на отправку JSON, вместо HTML.

После настройки системы аутентификаци, осталось только добавить декоратор @auth.login_required для всех функций, которые должны быть защищены. Например:

Если мы попробуем запросить эту функцию с помощью curl мы получим примерно следующее:

Для того, чтобы вызвать эту функцию, мы должны подтвердить наши полномочия:

Расширение с аутентификацией дает нам свободу выбирать какие функции будут в общем доступе, а какие защищены.

К сожалению веб-браузеры имеют дурную привычку показывать страшное диалоговое окно, когда запрос возвращается с ошибкой 401. Это происходит даже для фоновых запросов, так что если бы мы реализовали клиента для веб-браузера, нам пришлось бы прыгать через обручи, чтобы не давать браузеру показывать свои окна.

Простой путь обмануть браузер — возвращать любой другой код, вместо 401. Любимая всеми альтернатива это код 403, который означает ошибку «Forbidden». Хоть это достаточно близкая по смыслу ошибка, это нарушает стандарт HTTP, так что это неправильно. В частности будет хорошим решением не использовать веб-браузер в качестве клиентского приложения. Но в случаях, когда сервер и клиент разрабатываются совместно это спасает от многих неприятностей. Чтобы провернуть этот трюк нам нужно просто заменить код ошибки с 401 на 403:

В клиентском приложении нужно тоже отлавливать ошибку 403.

Возможные улучшения

Есть несколько возможностей улучшить разработанный нами сегодня веб-сервис.

Для начала, настоящий веб-сервис должен общаться с настоящей базой данных. Структура данных в памяти очень ограниченный способ хранения данных и он не должен использоваться в реальных приложениях.

Другой способ улучшить приложение это поддержка нескольких пользователей. Если система поддерживает несколько пользователей, то данные аутентификации могут использоваться чтобы возвращать персональные списки пользователям. В такой системе пользователи станут вторым ресурсом. Запрос POST будет регистрировать нового пользователя в системе. Запрос GET может возвращать информацию о пользователе. Запрос PUT может обновлять информацию о пользователе, например email. Запрос DELETE будет удалять пользователя из системы.

Вывод

Законченый код для веб-сервиса To Do List вы можете взять здесь: https://gist.github.com/miguelgrinberg/5614326.

Я верю что это было простое и дружелюбное введение в RESTful API. Если есть достаточный инетерес я мог бы написать вторую часть этой статьи, в которой мы разработаем простой веб-клиент для нашего сервиса.

Я сделал клиента для нашего сервиса:Writing a Javascript REST client.

Статья о таком же сервере, но с использованием Flask-RESTfulDesigning a RESTful API using Flask-RESTful.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *