Должен ли я сделать внешние вызовы API в менеджерах моделей Django - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть локальные модели django, которые отражают сущности некоторых внешних сервисов.Таким образом, в основном, когда я создаю локальный объект, я начинаю с отправки почтовых запросов в службу, а затем заполняю поля локального объекта данными из ответа и сохраняю их.

Это хорошая идея, чтобы поместить внешний APIвызывает менеджер моделей для того, чтобы абстрагировать логику для представлений и тестов?Или есть лучший подход?

Чего я хотел бы добиться, так это избежать дублирования логики повсюду в кодовой базе.

1 Ответ

0 голосов
/ 19 ноября 2018

Менеджер моделей, похоже, хорошая идея. Но, возможно, лучше поместить эту логику для внешних вызовов API в отдельный класс. Например:

class ExternalApiService(object):
    model = ModelName

    def create_object(self, **kwargs):
        # create model object
        self.model.objects.create(**kwargs)

    def call_external_api(self):
        # returns json response from API

    def process_api_response(self, json_response):
        # process response

    def get_latest_object(self):
        # get latest object

    def get_object(self, pk):
        # get object

И используйте их в представлениях.

service = ExternalApiService()

class SomeView(ListView):
    queryset = service.get_queryset()

    def get_context_data(self, *args, **kwargs):
        context = super(SomeView, self).get_context_data(*args, **kwargs)
        context['something_specific'] = service.get_latest_object()
        return context

Преимущество такого уровня состоит в том, чтобы отделить модели и представления от бизнес-логики и внешних сервисов. Также дает больше гибкости, поскольку вы можете получить доступ к внешнему API из объекта класса обслуживания, не имея доступа к модели или зависимости от модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...