Как стать автором
Обновить

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

Время на прочтение2 мин
Количество просмотров2.4K

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

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 3: ↑2 и ↓1+3
Комментарии8

Публикации

Работа

Data Scientist
45 вакансий

Ближайшие события