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

В этой статье мы создадим фе��ковое API GitHub'а.
Создание Проекта
На данный момент HappyX в Python не имеет CLI, поэтому все придется делать лапками ручками. Хотя можно просто создать проект с помощью 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
