Разработка RESTful API на Python с помощью HappyX

от автора

До этого я писал о разработке веб приложений на Nim здесь и здесь.

Что? Какой Nim? В заголовке указан Python!

Да, до недавнего времени писать веб приложения на веб фреймворке HappyX было возможно лишь с помощью Nim. На данный момент HappyX доступен и на Python. Любой желающий может воспользоваться библиотекой, если не знает Nim.

веб фреймворк HappyX

В этой статье мы создадим фейковое API GitHub’а.

Создание Проекта

На данный момент HappyX в Python не имеет CLI, поэтому все придется делать лапками ручками. Хотя можно просто создать проект с помощью PyCharm — это мы и сделаем.

Создание проекта в PyCharm

Теперь установим саму библиотеку happyx. Нам понадобится Python версии 3.10 и выше.

pip install happyx

Первое, что нам нужно сделать — импортировать функцию new_server из библиотеки.

from happyx import Server, JsonResponse

Далее, создадим сервер и фейковую базу данных.

app = Server('127.0.0.1', 5000) github_repos = [     {'user': 'HapticX', 'repo': 'happyx', 'stars_count': 1, 'description': 'web framework'},     {'user': 'python273', 'repo': 'vk_api', 'stars_count': 10, 'description': 'VK API for python'},     {'user': 'pydantic', 'repo': 'pydantic', 'stars_count': 5, 'description': 'python models'}, ]

Теперь можно объявлять сами эндпойнты.

Получение списка репозиториев

@app.get('/repos') def handle():     return github_repos

Получение информации по конкретному репозиторию

@app.get('/{user}/{repo}') def get_repo(user: str, repo: str):     for r in github_repos:         if r['user'].lower() == user.lower() and r['repo'].lower() == repo.lower():             return r     return JsonResponse(         {'response': 'failure'},         status_code=404     )

В конец файла добавляем запуск сервера:

if __name__ == '__main__':     app.start()

Можем запускать сервер:

py main.py

Либо просто запускаем через PyCharm.

Все настолько просто?

Да, HappyX прост в использовании — что на Python, что на Nim.

Теперь к более сложному
Создадим метод для добавления нового репозитория. Для этого изменим строчку импорта:

from happyx import new_server, JsonResponse, RequestModelBase

А также добавим модель запроса:

class Repository(RequestModelBase):     name: str     owner: str     description: str

И сам метод:

@app.post('/repo[repo]') def create_repo(repo: Repository):     if repo.name == '' or repo.owner == '':         return JsonResponse(             {'response': 'failure', 'msg': 'repo should have name and owner!'},             status_code=404         )     github_repos.append({         'repo': repo.name, 'user': repo.owner,         'stars_count': 0, 'description': repo.description     })     return JsonResponse({'response': 'success'})

Вот и все 🙂
Можно запускать проект и играться в postman.

Наше API GitHub на коленке создано!

Буду рад, если вы найдете какой-либо баг и откроете issue в репозитории.
Предложения по улучшению также приветствуются 😉

Исходный код: HapticX/happyx


ссылка на оригинал статьи https://habr.com/ru/articles/756548/


Комментарии

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

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