Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 22, 2023 13:52:04

Gorg
Зарегистрирован: 2022-05-15
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

создание собственного API на базе NUTS

Доброго всем! Есть брокер сообщений NATS (https://github.com/nats-io/nats.py). На базе этой библиотеки я сделал класс с необходимым функционалом и теперь хочу сделать API для общения сервисов через этот класс. Вот как выглядит реализация взаимодействия сервисов:

             async def api_request(msg):
                cmd_str = msg.data.decode() #получили сообщение от внешнего сервиса
                print(f"Received a message on '{msg.subject} {msg.reply}': {msg.data.decode()}")
                match cmd_str:
                    case "help":  # return available commands
                        pass
                    case "connect":  # connect to server
                        pass
                    case "disconnect":  # disconnect from server
                        pass
                    case "run":  # start reading
                        pass
                    case "stop":  # stop reading
                        pass
                    case "config":  # get config
                        pass
                    case "status":  # get current status
                        pass
                    case "init":  # init service with new config
                        pass
                    case "write":  # write value to node
                        pass
                    case "objects":  # get objects
                        pass
                    case "test_command":  # just test
                        cmd_str = "test success!"
                ret_str = cmd_str
                await self.nc.publish(msg.reply, bytes(ret_str, 'utf-8')) #отправили ответ
            self.api_sub = await self.nc.subscribe("api", "workers", api_request) #подписались на топик и зарегали колбек
тут создается колбек для внешнего запроса(текстовое сообщение) и внутри колбека с помощью match|case должны вызываться функции сервиса в зависимости от этого запроса (пока тут заглушки). все функции вызываемые внутри колбека возвращают string.
Получается что api реализовано прямо внутри класса, а хотелось бы вынести код API в отдельный файл как это реализовано в FastApi. Т.е. другой программист, пишет свое API без оглядки на код моего класса в отдельном файле используя декоратор. Такой подход позволит избавиться от match|case, позволит отвязать класс от других зависимостей и API можно делать любое включая опциональный функционал. Спасибо за любую информацию, самому пока ничего путного в голову не приходит

Отредактировано Gorg (Июнь 23, 2023 07:15:46)

Офлайн

#2 Июнь 22, 2023 15:21:52

Gorg
Зарегистрирован: 2022-05-15
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

создание собственного API на базе NUTS

не корректное название топика. NATS по сути не причем, вопрос в том, как сделать свое API на базе существующего колбека, наверное так

Отредактировано Gorg (Июнь 23, 2023 07:15:37)

Офлайн

#3 Июнь 24, 2023 11:12:26

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9856
Репутация: +  853  -
Профиль   Отправить e-mail  

создание собственного API на базе NUTS

Gorg
На базе этой библиотеки я сделал класс с необходимым функционалом и теперь хочу сделать API для общения сервисов через этот класс.
Лучше с самого начала начни. Сделай не класс, а интерфейс сначала. Напиши взаимодействие с этим интерфейсом. А потом под интерфейс делай программную часть уже, которая через этот интерфейс сможет быть задействованной.

Gorg
тут создается колбек для внешнего запроса(текстовое сообщение) и внутри колбека с помощью match|case должны вызываться функции сервиса в зависимости от этого запроса
Можешь это всё спокойно выкинуть. Неправильное проектирование привело к тому, что ты просто застрял на какой-то простой вещи.



Отредактировано py.user.next (Июнь 24, 2023 11:13:54)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version