Что такое сервер api. Грамотная клиент-серверная архитектура: как правильно проектировать и разрабатывать web API

6.1 Метод CheckDimensions

Синтаксис:

Boolean CheckDimenshions (Dimensions DimensionsList,

Out float Length,

Out float Width,

Out float Height,

Out float Weight,

Out string Comment)

Параметры:

Имя параметра Входной / Выходной Тип Описание
DimensionsList входной Dimensions Массив
габаритно­весовых
характеристик товаров
Length выходной float Длина посылки
Width выходной float Ширина посылки
Height выходной float Высота посылки
Weight выходной float Вес посылки
Comment выходной float Текстовое описание при превышении
предельных значений габаритно­весовых
характеристик

Описание:

В метод передается список габаритно­весовых характеристик всех товаров
(DimensionsList). После расчета выходные параметры Length, Width, Height (длина,
ширина и высота соответственно) заполняются габаритами посылки, после решения
задачи «оптимальной укладки», а в параметр Weight передается суммарный вес всех
товаров, без учета упаковочных материалов. В том случае если габариты отправления
превышают предельные значения в параметр Comment передается текстовое описание
несоответствия.

Возвращаемое значение: Метод возвращает булево значение True, если
габаритно­весовые характеристики не превышают предельных значений и доставка
возможна хотя бы одним доступным способом, иначе False. Предположительно данный
метод может использоваться на стороне клиента для оперативной оценки
принципиальной возможности отправки заказа и своевременного принятия каких­либо
решений, если сделать этого невозможно.

6.1.1 Пример вызова метода CheckDimensions



// Предположим, что в корзине 2 позиции и необходимо проверить не превышают ли он
ограничения по допустимым габаритам и весу
aplix.Dimensions Dimensions = new aplix.Dimensions;
aplix.Dimensions Item;

Item.Length = 0.130f;
Item.Width = 0.100f;
Item.Height = 0.001f;
Item.Weight = 0.1f;
Item.Qty = 2;
Dimensions = Item;
Item = new aplix.Dimensions();
Item.Length = 0.1331f;
Item.Width = 0.0998f;
Item.Height = 0.0788f;
Item.Weight = 0.575f;
Item.Qty = 1;
Dimensions = Item;
// Выходные параметры
float Length;
float Width;
float Height;
float Weight;
string Comment;
// Выполнить проверку габаритно‐весовых характеристик
bool Result = ws.CheckDimenshions(Dimensions, out Length, out Width, out Height, outWeight, out Comment);
// Визуализация результата
Response.Write("Result:" + Result.ToString() + "");
Response.Write("Length:" + Length.ToString() + "");
Response.Write("Width:" + Width.ToString() + "");
Response.Write("Height:" + Height.ToString() + "");
Response.Write("Weight:" + Weight.ToString() + "");
Response.Write("Weight:" + Comment + "");

6.2 Метод CalculateShippingCost

Синтаксис:
Long CalculateShippingCost (string OrderNumber,
Float DeclaredCost,
Goods Goods,
Address Address,
Byte TypeOfSeal,
Boolean SturdyPackaging,
Boolean CashOnDelivery,
Out DeliveryType Types,
Out string Comments)Параметры:

Имя параметра Входной / Выходной Тип Описание
OrderNumber входной string Номер заказа, если известен в системе
потребителя. Если будет задан, то расчет
в будущем будет привязан к заказу.
DeclaredCost входной Float Объявленная ценность отправления. На

страховка.
Goods входной Goods Список товаров массив структур
(Артикул,
Наименование,
Длина,
Ширина, Высота, Вес, Количество)
Address входной Address Адрес получателя (структура: Почтовый
индекс,
Регион,
Район,
Город,
Населенный пункт, Улица, Дом, Корпус,
Картира)
TypeOfSeal входной Byte Вариант
уплотнения,
возможные
значения:1 ­Не требуется

2 ­Пузырчатая пленка

3­ Наполнитель

SturdyPackagin входной Boolean Обязательно ли требуется жесткая
упаковка
CashOnDelivery входной Boolean Требуется ли наложенный платеж
Types выходной DeliveryType
Comments выходной DeliveryType Список доступных вариантов доставки

Описание:

Метод по заданным параметрам выдает список доступных вариантов доставки
(выходной параметр Types) в виде массива структур <Идентификатор способа доставки, Наименование способа доставки, Себестоимость доставки, Страховую премию, Затраты на упаковку и маркировку, Адрес нахождения почтового отделения, либо точки самовывоза, Режим работы почтового отделения, либо точки самовывоза, Минимальное количество дней доставки, Максимальное количество дней доставки, Доп.информация>. Если в процессе расчета возникли какие­либо исключения, то
описание ошибки будет возвращено в параметр Comments.

Возвращаемое значение:

Метод возвращает уникальный идентификатор расчета, по которому в дальнейшем
можно будет запросить детализацию материальных и трудовых затрат, используя метод
GetDetailsOfCost.

6.2.1 Пример вызова метода CalculateShippingCost



ws.Credentials = new NetworkCredential("test", "test");


Address.Index = "684005";


Address.City = "Елизово г";

Address.Home = "16";


aplix.Goods Item;
Item = new aplix.Goods();
Item.SKU = "216293";

Item.Length = 0.130f;
Item.Width = 0.100f;
Item.Height = 0.001f;
Item.Weight = 0.1f;
Item.Qty = 2;
Goods = Item;
Item = new aplix.Goods();
Item.SKU = "499687";

Item.Length = 0.1331f;
Item.Width = 0.0998f;
Item.Height = 0.0788f;
Item.Weight = 0.575f;
Item.Qty = 1;
Goods = Item;
//Заполним параметры для калькулятора
string OrderNumber="1234567890";
float DeclaredCost = 36370;
sbyte TypeOfSeal = 1;
bool SturdyPackaging = true;
bool CashOnDelivery = false;
aplix.DeliveryType Types; string Comments;
//Вызов калькулятора
long Status = ws.CalculateShippingCost(OrderNumber, DeclaredCost, Goods, Address,TypeOfSeal, SturdyPackaging,CashOnDelivery, out Types, out Comments);
//Визуализация результата
Response.Write("Id расчета:"+Status.ToString()+"
");
Response.Write("Доп.информация по расчету:" + Comments + "
");
Response.Write(@"
");
foreach (aplix.DeliveryType type in Types) {
Response.Write(""+ " "+ " "+ " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " "); }
Response.Write("
































TypeId TypeName TypeDescription Cost Insurance PostalRate PreparingCost Address Worktime MinPeriod MaxPeriod AdditionalInformation
" + type.TypeId.ToString() + " " + type.TypeName + " " + type.TypeDescription + " " + type.Cost.ToString() + " " + type.Insurance.ToString() + " " + type.PostalRate.ToString() + " " + type.PreparingCost.ToString() + " " + type.Address + " " + type.Worktime + " " + type.MinPeriod.ToString() + " " + type.MaxPeriod.ToString() + " " + type.AdditionalInformation + "

");
}

6.3 Метод PushOrder

Синтаксис:
    Long PushOrder (
          ID,
          Number,
          Date,
          Customer,
          DeclaredCost,
          AmountToBePaid,
          DeliveryTypeId,
          TypeOfSeal,
          SturdyPackaging,
          Activity,
          Goods,
          DeliveryDate,
          StartTimeDelivery,
          EndTimeDelivery,
          Сomment,
          ShipperId,
          Marker)
Параметры:

Имя параметра Входной / Выходной Тип Описание
ID входной String Идентификатор заказа в системе
потребителя (уникальное значение)
Number входной String Номер заказа в системе потребителя
(будет распечатываться в комментариях
при маркировке отправлений)
Date входной DateTime Дата заказа в системе потребителя (будет
распечатываться в комментариях при
маркировке отправлений
Customer входной Customer Информация о покупателя, струкутра
DeclaredCost входной Float Объявленная ценность отправления. На
указанную сумму будет оформленная
страховка.
AmountToBeP
aid
входной Float Сумма
к
оплате.
Если
заказ
предоплаченю то 0.
DeliveryTypeId входной Int Идентификатор выбранного способа
доставки.
TypeOfSeal входной Int Вариант
уплотнения,
возможные
значения:
1­Не требуется
2­Пузырчатая пленка
3­Наполнитель
SturdyPackaging входной Boolean Обязательно ли требуется жесткая
упаковка
Activity входной Boolean Актуальность заказа. True – если заказ
актуален, False – если заказ отменен.
Goods входной Goods Список товаров
DeliveryDate входной DateTime Дата доставки, заполняется если выбрана
курьерская доставка
StartTimeDeliv
ery
входной Int Желаемое
время
доставки
«С»,

доставка
EndTimeDelivery входной Int Желаемое время доставки «До»,
заполняется если выбрана курьерская
доставка
Сomment входной String Комментарий к заказу
ShipperId входной String Идентификатор
отправителя,
заполняется
если
у контрагента
несколько интернет магазинов
Marker входной String Маркер заказа, заполняется если
отправления маркируются метками
сайт

Описание:
Метод размещает информацию о заказе в системе исполнителя. Система­потребитель
передает номер и дату заказа, уникальный идентификатор заказа, информацию о
получателе, включая его адрес и телефон, объявленную ценность, сумму наложенного
платежа если таковая есть, состав товарного вложения, тип упаковки и выбранный
способ и детали доставки.

Возвращаемое значение:
Метод возвращает уникальный идентификатор заказа в системе исполнителя.

6.3.1 Пример вызова метода PushOrder


aplix.Delivery ws = new aplix.Delivery();
ws.Credentials = new NetworkCredential("test", "test");
// Подготовим струкутру "Получатель отправления"
aplix.Customer Customer = new aplix.Customer();
// 684005, Камчатский край, Елизовский р‐н, Елизово г, Ленинская ул, дом No 16
aplix.Address Address = new aplix.Address();
Address.Index = "684005";
Address.Region = "Камчатский край";
Address.District = "Елизовский р‐н";
Address.City = "Елизово г";
Address.Street = "Ленинская ул";
Address.Home = "16";
Customer.Address = Address;
Customer.ID = "[email protected]";
Customer.Name = "Сергей";
Customer.Email = "[email protected]";
Customer.Phone = "+7(916)975‐53‐54";
//Заполним параметры заказа
string ID = "2013‐1234567890"; // Уникальный идентификатор заказа в системе клиента
string Number = "1234567890"; // Номер заказа в системе клиента
DateTime Date = new DateTime(2013, 08, 30);
float DeclaredCost = 36350.0f; // Объявленная ценность
float AmountToBePaid = 0; // Нет наложенного платежа
int DeliveryTypeId = 4; // ЕМС
sbyte TypeOfSeal = 2; // Пузырчатая пленка
bool SturdyPackaging = true; // Жесткая упаковка (для хрупких вещей)
bool Activity = true; // Документ актуален
// Предположим, что заказ состоит из 2 позиций
aplix.Goods Goods = new aplix.Goods;
aplix.Goods Item;
Item = new aplix.Goods();
Item.SKU = "216293";
Item.Name = "карта памяти SDXC 64Gb Class 10 Transcend";
Item.Length = 0.130f;
Item.Width = 0.100f;
Item.Height = 0.001f;
Item.Weight = 0.1f;
Item.Qty = 1;
Item.Price = 2080.0f;
Item.VATRate = "НДС18";
Goods = Item;
Item = new aplix.Goods();
Item.SKU = "499687";
Item.Name = "зеркальный фотоаппарат Canon EOS 650D Kit Tamron AF 18‐270mm Black";
Item.Length = 0.1331f;
Item.Width = 0.0998f;
Item.Height = 0.0788f;
Item.Weight = 0.575f;
Item.Qty = 1;
Item.Price = 34270.0f;
Item.VATRate = "НДС18";
Goods = Item;
DateTime DeliveryDate = new DateTime(2013, 09, 05); //Доставка на 05 09 2013 года
int StartTimeDelivery = 10; // интервал доставки с 10
int EndTimeDelivery = 14; // до 14
string Comment = "Тестовый заказ";
//Впулить заказ в систему
long OrderId = ws.PushOrder(ID, Number, Date, Customer, DeclaredCost, AmountToBePaid,DeliveryTypeId, TypeOfSeal, SturdyPackaging, Activity, Goods, DeliveryDate, StartTimeDelivery,EndTimeDelivery, Comment, "", "");
Response.Write("Id заказа:" + OrderId.ToString() + "
");

6.4 Метод GetDetailsOfCost

Синтаксис:        DetailsOfCostList GetDetailsOfCost (ID, TypeId) Параметры:

Входной / Выходной
Тип
Описание

входной
Long
Идентификатор расчета (уникальное значение), полученный при вызове метода CalculateShippingCost

входной
Int

Имя параметра
ID TypeId

Описание: Метод возвращает детализированный список затрат на маркировку и упаковку отправления по заданным идентификатору расчета и идентификатору варианта доставки. Возвращаемое значение: Метод возвращает массив структур

Каждый элемент массива содержит описание затраты, количество, цену и стоимость.

6.4.1 Пример вызова метода GetDetailsOfCost


aplix.Delivery ws = new aplix.Delivery();
ws.Credentials = new NetworkCredential("test", "test");
long ID = 168; // Идентификатор расчета, полученный методом CalculateShippingCost
int TypeId = 3; // Почтовая доставка

aplix.DetailsOfCost Details = ws.GetDetailsOfCost(ID, TypeId);
//Визуализация результата
Response.Write("Id расчета:" + ID.ToString() + "
");
Response.Write("Id метода доставки:" + TypeId.ToString() + "
");
Response.Write(@"


");
foreach (aplix.DetailsOfCost DetailOfCost in Details)
{
Response.Write("" + " " + " " + " " + " " + " ");
}
Response.Write("















Description Price Qty Cost
" + DetailOfCost.Description + " " + DetailOfCost.Price.ToString() + " " + DetailOfCost.Qty.ToString() + " " + DetailOfCost.Cost.ToString() + "

");

6.5 Метод PushReestr

Синтаксис: Long PushOrder (ID, Number, Date, DateOfShipment, IDs) Параметры:

Входной / Выходной
Тип
Описание

входной
String
Идентификатор реестра в системе потребителя (уникальное значение)

входной
String
Идентификатор варианта доставки, по которому необходимо получить детализацию

входной
DateTime
Дата реестра (будет распечатываться в актах приема­передачи отправлений)

входной
DateTime
Ожидаемая дата передачи отправлений исполнителю

входной
String
Массив идентификаторов заказов, которые включаются в данный реестр

Имя параметра
ID Number Date DateOfShipment IDs

Описание: Метод размещает информацию о реестре в системе исполнителя. Система­потребитель передает номер и дату реестра, уникальный идентификатор реестра, ожидаемую дату передачи отправлений исполнителю. Возвращаемое значение: Метод возвращает уникальный идентификатор реестра в системе исполнителя.

6.5.1 Пример вызова метода PushReestr


aplix.Delivery ws = new aplix.Delivery();
ws.Credentials = new NetworkCredential("test", "test");
// Список идентификаторов заказов, которые входят в данный реестр
string IDs={"2013‐1234567890", "2013‐1234567891"};
// Уникальный идентификатор реестра в системе клиента
string ID = "2013‐r12345";
// Номер реестра в системе клиента
string Number = "r12345";
// Дата формирования реестра в системе клиента
DateTime Date = new DateTime(2013, 10, 22);
// Предполагаемая дата передачи заказов на доставку
DateTime DateOfShipment = new DateTime(2013, 10, 23);
// Получим детализацию расчета
long ReestID = ws.PushReestr(ID, Number, Date, DateOfShipment, IDs);
//Визуализация результата
Response.Write("Id реестра:" + ReestID.ToString() + "
");

6.6 Метод GetTrackNumbers

Синтаксис: DateTime GetTrackNumbers (DateOfLastGetting, TrackNumbers) Параметры:

Входной / Выходной
Тип
Описание

входной
DateTime
Дата последнего успешного получения трек­номеров. Параметр используется для того чтобы сократить объем передаваемых данных и не дублировать данные, которые были выгружены ранее.

входной
TrackNumber
Массив трек­номеров по заказам

Имя параметра
DateOfLastGetting TrackNumbers

Описание: Метод возвращает список трек­номеров, которые были привязаны к заказам за период с DateOfLastGetting по текущее время. Результата помещается в выходной параметр TrackNumbers. Свойство Activity имеет значение true, если трек­номер актуален, иначе ложь. Возможны ситуации, когда отправлению присваивается один трек­номер, а по истечении некоторого второй трек номер, в этом случае трек­номер, присвоенный изначально становиться не актуальным. Возвращаемое значение: Метод возвращает дату и время на которое актуальны выгружаемые данные. Данное значение необходимо использовать при следующем вызове метода GetTrackNumbers в параметре DateOfLastGetting.

6.6.1 Пример вызова метода GetTrackNumbers


aplix.Delivery ws = new aplix.Delivery();
ws.Credentials = new NetworkCredential("test", "test");
// Дата последнего удачного получения треков
DateTime DateOfLastGetting = new DateTime(2013, 08, 01);
aplix.TrackNumber TrackNumbers;
// Получим список трек‐номеров
DateTime NewDateOfLastGetting = ws.GetTrackNumbers(DateOfLastGetting, out TrackNumbers);
//Визуализация результата
Response.Write("NewDateOfLastGetting: " + NewDateOfLastGetting.ToString() +"
");
Response.Write(@"


");
foreach (aplix.TrackNumber TrackNumber in TrackNumbers)
{
Response.Write("" + " " + " " + " " + " ");
}
Response.Write("













OrderID TrackNumber Activity
" + TrackNumber.OrderID.ToString() + " " + TrackNumber.Number + " " + TrackNumber.Activity+ "

");

API (Application Programming Interface) — это определенное представление данных для взаимодействия между приложениями. В частном случае, в качестве ответного приложения, может выступать сервер. АПИ — это описанный формат, которому должны соответствовать обе стороны обмена данными.

Технология различных API — это набор методов взаимодействия. Система АПИ в том или ином виде представлена везде. Например, у нас в руках смартфон с приложением покупки билетов. На самом «высоком» уровне мы видим графическую часть приложения с полями ввода данных. Мы запрашиваем рейсы по маршруту на определенный день и что в этот момент происходит:

  1. Мобильное приложение формирует запрос к серверу. Запрос формируется в определенном формате. Например: Вылет:МоскваDME,Прилет:АмстердамAMS,Дата:01-01-2017,Мест:2,Класс:Эконом. Эта строчка содержит строгий формат — Заголовок:Значение, все значения через запятую, обязательные поля Вылет, Прилет и Дата, если не указаны другие данные, то они будут по-умолчанию: Мест:1, Класс:Эконом.
  2. Сервер авиакомпании получает этот запрос и программа понимает, что от нее требуется найти рейсы и цены.
  3. Сервер обращается к базе данных на языке SQL, что тоже является частным представлением API
  4. База данных обращается к файлу через API файловой системы
  5. Файловая система обращается к жесткому диску — через его API-протокол.

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

Сегодня в том или ином виде, вся информация в компьютерном виде представляется посредством АПИ.

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

Классификация видов АПИ

В зависимости от решаемой задачи, протоколы передачи АПИ могут быть как стандартизированные, так и собственного формата. Наиболее часто применяются стандартизированные протоколы, это позволяет разработчикам задействовать готовые модули для их обработки, что сокращает время на разработку приложения. Различные специфические типы применяются для достижения определенного преимущества, например снижения трафика, скорость распознавания команд, а в некоторых случаях — это единственная возможность — разработка собственного формата — к примеру вещание видео с эфимеридной составляющей.

По виду передаваемой информации АПИ подразделяется на следующие форматы:

  • Стандартные протоколы API
    • Текстовый
  • Бинарный
    • Поточный
    • Кадровый

По виду взаимодействия клиент-сервер, наиболее распространены следующие виды:

  • Пакетные
    • HTTP/HTTPS
    • Sockets
  • Процедурные (протокольные)
  • Поточные
  • Широковещательные

Применение систем АПИ

Все онлайн-сервисы и системы имеют публичные API. В некоторых случаях за использование доступа к API приходится оплатить подписку или определенное количество обращений. Если в Ваших целях стоит создание онлайн-сервиса, который будет предоставлять какую-либо информацию, обратите на API особенное внимание. Подход и хорошее документирование возможностей API, это ключ к успеху. Все сторонние разработчики, которые в последующем будут создавать дополнительные приложения, обязаны использовать именно этот протокол.

Довольно частая практика, когда сервер API, это единственное представление данных всего сервиса, а клиентская часть работает только через приложение. Яркие примеры Viber, Instagram, Swarm- еще эти приложения называют Mobile only (только в мобильном). В связи с этим, должна быть создана система распределения нагрузки между серверами API, что позволит создать сервис 24/7 при масштабируемой мощности. Перед созданием серверной части, следует сразу оценить возможности данного мероприятия и учитывать эти возможности при разработке программ.

Для достижения стабильности, преимущественно применяются разработки под Linux-среду и его системные сервисы. Это обуславливается тем, что эта операционная система более гибкая, ресурсоемкая и имеет высокий уровень журналирования и отладки при сбоях. В качестве публикатора применяются веб-серверы или специальные сервисы. Мы имеем ряд наработок многопоточных сервисов для обеспечения систем API.

Мы описали, как это работает, давайте взглянем, как на этом зарабатывать? Первый метод напрашивается сам собой — предоставление услуги через АПИ. Вы можете продавать услуги или товары напрямую — обращение к АПИ Вашего ресторана, сформирует заказ на доставку еды на дом. Или предоставлять полезный сервис на платной основе, например формирование бухгалтерских отчетов.

Второй метод заработка на АПИ заключается в аггрегировании нескольких систем в один сервис. Мы уже обсудили вид АПИ для авиакомпании, но авиакомпаний десятки, а то и сотни. Сейчас стали популярны сервисы по продаже билетов — Aviasales, OneTwoTrip, Momondo, которые фактически из себя ничего не представляют, а только берут разные АПИ от авиакомпаний и публикуют собственный сервис, который собирает данные с этих компаний. Практика очень распространенная и высокодоходная.

Третий метод заработка на API, это «подмешивание данных». Если опять вернемся к авиакомпании, то мы можем создать сопутствующую услугу на их базе, к примеру, страхование. Мы публикуем сервис или альтернативную точку входа АПИ, где помимо рейсов, в данные АПИ будет добавлена информация по страхованию с привязкой к конкретному рейсу. Также поступают, к примеру, авиакомпании или посредники, расширяя АПИ для информирования об отелях.

Создание технологий АПИ

Мы предлагаем свои услуги по созданию серверов API всех описанных ранее типов и протоколов. Мы имеем опыт построения взаимодействия в различных высоконагруженных системах. На выходе мы представляем не только готовый сервер (черный ящик) но и полное описание протокола в виде конструкторской документации. Данное описание протокола может быть предоставлено следующим разработчикам, применяемым эти данные, либо в открытом доступе для OpenSource.

Помимо непосредственно сервера, мы можем создать систему слежения и аналитики, которая будет сигнализировать об ошибках и превышением регламентированной нагрузки сервера(-ов).

API (от англ. Application Program Interface) – это интерфейс взаимодействия между сайтом клиента и сервером. Представляет собой ресурс, который сервер открывает для работы извне, т.е. программист может воспользоваться им для получения доступа к функционалу программы, библиотеки, модуля. API делает возможным работу ресурсов, которые используют потенциал и мощность предоставляющего сайта, а также запуск дополнительных компонентов к ним, расширяющих возможности web-проекта.

Преимущества:

Типы

  • возвращающие. На запрос стороннего приложения какого-либо метода с заданными параметрами сервер дает запрашиваемую информацию в определенном формате;
  • изменяющие. Клиент вызывает некоторую функцию сервера, которая вводит новую информацию или изменяет на нем определенные настройки.

API Яндекс.Директа

Для продвижения сайтов эффективен API .

  1. На его базе разработчики могут создавать приложения, которые напрямую взаимодействуют со службой поисковой системы. Такие программы позволят рекламодателям гибко управлять масштабными , получать статистические отчеты по каждой из них, точно прогнозировать бюджеты.
  2. Рекламные агентства с помощью API Директа могут просмотреть весь список своих клиентов, клиенты – представителей.
  3. Если определенные фразы, используемые для поисковой оптимизации , дают низкий CTR в контекстной рекламе, показ по ним можно автоматически отключить. На тематических площадках через API можно задавать ставки, определенные доноры могут быть удалены.
  4. API Яндекс.Директа имеет SOAP-интерфейс, т.е предоставляет широкий выбор языков программирования для создания приложений. Данный протокол поддерживается такими языками, как Perl, Java,

Публикации по теме