Выполните 3 задачи за один вызов API - PullRequest
0 голосов
/ 06 мая 2018

Мой текущий поток вызовов API от моего клиента выглядит следующим образом:

  1. Отправка данных в конечную точку бренда, получение недавно вставленного идентификатора, присвоение userData.brand
  2. Отправка данных конечной точке пользователя, получение недавно вставленного идентификатора, присвоение userData.user
  3. Отправка обоих значений конечной точке userBrand

Это кажется дорогостоящим процессом, поэтому я думаю объединить все запросы в один, но я не уверен, как обработать его со стороны сервера. Я знаю, что могу использовать только одну конечную точку, но я не знаю, как использовать все сериализаторы / представления для одной конечной точки.

Итак, на стороне клиента, это то, что у меня есть:

В brand.js

  AdsomaService.registerUser(vm.userData).then(function(data) {
    vm.successMessage = data.message;
    vm.userBrandData.user = data.id;
  }, function error(data) {
    $log.info(data);
    vm.errorMessage = data;
    errorCount++;
  });          

  AdsomaService.registerUserBrand(vm.userBrandData).then(function(data) {
    vm.successMessage = data.message;
  }, function error(data) {
    $log.info(data);
    vm.errorMessage = data;
    errorCount++;
  });   

  if(errorCount > 0) {
    vm.message = vm.errorMessage;
    angular.element('#errorMessage').appendTo('body').modal('show');
  } else if(errorCount === 0) {
    vm.message = vm.successMessage;
    angular.element('#successMessage').appendTo('body').modal('show');
  }

In adsoma.js

function registerUser(userData) {
  var url = envService.read('apiUrl') + '/user_signup/';
  var dataJSON = {
    email: userData.email,
    password: userData.password,
    account_type: userData.accountType
  };
  var req = {
    method: 'POST',
    url: url,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    data: $httpParamSerializerJQLike(dataJSON)
  };
  return ($http(req).then(handleSuccess, handleError));
}

function registerBrand(brandData) {
  var url = envService.read('apiUrl') + '/brand_signup/';
  var dataJSON = {
    name: brandData.name,
    brand: brandData.name,
    email: brandData.email,
    phone: brandData.phone,
    website: brandData.website
  };
  var req = {
    method: 'POST',
    url: url,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    data: $httpParamSerializerJQLike(dataJSON)
  };
  return ($http(req).then(handleSuccess, handleError));
}

function registerUserBrand(userData) {
  var url = envService.read('apiUrl') + '/user_brand_signup/';
    var dataJSON = {
    user: userData.user,
    brand: userData.brand
  };
  $log.info(dataJSON);
  var req = {
    method: 'POST',
    url: url,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    data: $httpParamSerializerJQLike(dataJSON)
  };
  return ($http(req).then(handleSuccess, handleError));
}

А на стороне сервера вот что у меня есть:

В views.py

Код здесь: https://pastebin.com/P5ih75An.

In serialisers.py

Код здесь: https://pastebin.com/2zDgZDLc.

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