Где выполнить внешний вызов API, который заполняет Django Информация о модели - PullRequest
0 голосов
/ 24 января 2020

Предоставление следующей Django модели:

class Expedition(models.Model):
    code = models.CharField(max_length=256, blank=True)
    order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name='expeditions')

I wi sh для предоставления конечной точки, которая будет использоваться во внешнем интерфейсе для создания экспедиции, но код извлекается из внешнего вызова API.

Я пытался переопределить метод execute_create в ModelViewSet, добавив вызов внешнего API и затем проверив, если response.status_code == 200 или нет, но метод сериализатора create всегда вызывается с code = '' .

Как мне управлять вызовом API?

1 Ответ

0 голосов
/ 24 января 2020

Мы делаем нечто похожее на это для службы поиска на работе. Это django rest приложение, которое преобразует параметры запроса в вызов Solr API. Обработка запроса выглядит следующим образом:

  • Определите обработчик get для представления, которое выполняет следующие действия:
  • Использование настраиваемого сериализатора DRF для преобразования параметров запроса в их эквиваленты для Поиск Solr
  • Определение solr клиента для переноса pysolr для определенных c вещей, которые нам нужно переопределить / повторно реализовать, и предоставление метода обработки поиска
  • Использование метод поиска клиента solr для запроса к Solr API с запросом
  • Обработка результатов с бизнес-логами c
  • Возврат как JSON

Это все сделано в обработчиках GET и POST подкласса APIView.

Вы можете сделать что-то подобное.

Я бы предложил, по крайней мере, следующее:

  1. Проверка условия обслуживания API, обеспечивающие стороннее хранение и репликацию данных. Если это позволяет, то продолжайте. Если этого не произойдет, найдите другой сервис для использования. Будьте хорошим пользователем сети.
  2. Реализуйте клиент, который абстрагируется, используя сторонний API, в серию полезных методов. Мне нравится, как структурирован API пакета requests.
  3. Повторно реализуйте обработчики GET / POST / et c в представлении при необходимости
...