До этого я писал о разработке веб приложений на 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