powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / REST в Ансамбле - че так сложно?
14 сообщений из 14, страница 1 из 1
REST в Ансамбле - че так сложно?
    #39713927
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каше 2017.2.1. Пытаюсь сделать http запрос к другому серверу, нужно json-объект отправить в теле запроса, запрос должен иметь Content-Type=application/json, простейшая задача.
Пытаюсь использовать операцию с EnsLib.HTTP.OutboundAdapter, и все превращается в BDSM. Нужно создать объект типа "поток", да еще не какой-нибудь, а такой, который имеет атрибуты, а их по разным пакетам распихан миллион, присвоить в этом потоке атрибут CONTENT-TYPE
Код: sql
1.
d stream.SetAttribute("CONTENT-TYPE","application/json")

и отправит данные
Код: sql
1.
s sc=..Adapter.Post(.httpResponse,,stream)

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

Ну ладно, наверное, я дурак, и нужно использовать специально приспособленный класс EnsLib.REST.Operation, как это рекомендует документация. Смотрим, чем от отличается от Ens.BusinessOperation - дополнительно наследуется от Ens.Util.JSON, а там есть методы типа JSONStreamToObject. Наверное, он сразу сделает нам сразу нужный нам поток? А вот нифига. Мало того, что поток там без атрибутов, так он еще не понимает объекты типа %DynamicObject, потому что использует старый механизм %ZEN.Auxiliary.jsonProvider.

Еще есть EnsLib.REST.GenericOperation, но я ним я связываться не стал, хотя бы потому, что у него нет исходников и непонятно, что он делает.

Нет, я понимаю, с этим всем можно разобраться и у меня вроде бы получилось, но зачем, если через %Net.HttpRequest все делается гораздо проще и интуитивно понятнее? Я не верю, что все так деревянно, REST же не какая-то специфическая штука, сейчас половина сервисов на нем сделано, а Ансамбль - автоматизация более высокого уровня, чем разработка через %NetHttpRequest. Скажите, как вы делаете, может, я чего-то элементарного не понимаю?
...
Рейтинг: 0 / 0
REST в Ансамбле - че так сложно?
    #39713948
eduard93
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н., была такая же проблема решал через кастомный адаптер .
...
Рейтинг: 0 / 0
REST в Ансамбле - че так сложно?
    #39713950
eduard93
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как пример написания адаптера к большому REST API могу предложить технологию Managed File Transfer которая предлагает доступ к облачным дискам Box, Kiteworks и DropBox.
В частности я дописал к ней адаптер для Яндекс.Диска .
В MFT предлагается следующая архитектура решения - потребителя REST API:
Адаптер разделяется на 2 класса: один делает http запросы и возвращает объекты, второй организует бизнес-логику

Все запросы отправляются одним методом, аргкменты которого - переменные в данном API, за счёт чего достигается унифицированность ответа

Класс бизнес-логики занят обработкой объекта-ответа
...
Рейтинг: 0 / 0
REST в Ансамбле - че так сложно?
    #39715872
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.,
а не проще сделать шлюзик для внешних json-запросов.
У меня такой есть на php.
Код простой, типа:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
	$curl=curl_init();

	$data = $_POST["data"];
	$serv = $_POST["serv"];
	$path = $_POST["path"];

	$headers[]='Host: '.$serv;
	$headers[]='Content-Type: application/json';
	$headers[]='Content-Length: '.strlen($data);

	curl_setopt($curl, CURLOPT_URL, $serv.$path);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_POST, 1);
	curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
	curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

	echo curl_exec($curl);



Засылаем в него постом наш JSON - и забираем ответ.
Плюс (м.б. и сомнительный) - шлюзик может лежать на амазоне и если нас решили забанить, то это ненадолго ;)
...
Рейтинг: 0 / 0
REST в Ансамбле - че так сложно?
    #39716319
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется, такой базовый функционал должен все-таки делаться на уровне стандартных библиотек, и без таких вот неочевидных действий.
...
Рейтинг: 0 / 0
REST в Ансамбле - че так сложно?
    #39776293
kalin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.,
Как Вам эта статья https://habr.com/ru/post/265845/ и что думает Intersystems по этому поводу ?
...
Рейтинг: 0 / 0
REST в Ансамбле - че так сложно?
    #39776327
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kalinБлок А.Н.,
Как Вам эта статья https://habr.com/ru/post/265845/ и что думает Intersystems по этому поводу ?Статья совершенно ни о чем. И думать InterSystems там не над чем.
...
Рейтинг: 0 / 0
REST в Ансамбле - че так сложно?
    #39776420
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kalin,

Мне restful с его ресурсами, статусами и CRUD не близок. Мне ближе спихнуть кучу данных пост-запросом в JSON и получить кучу данных в ответ. А Интерсистемс, действительно, думать не о чем. Есть технология - они ее поддерживают. И уже дело наше, как ее использовать.
...
Рейтинг: 0 / 0
REST в Ансамбле - че так сложно?
    #39781852
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н. Мне ближе спихнуть кучу данных пост-запросом в JSON и получить кучу данных в ответ И где-то там, в класс-методе обработки ( впрочем, и на клиенте тоже ) "красиво" роутить вызовы других методов в зависимости от свойств прилетевшей кучи. Но понимаю, да. Сам так делал ;)
...
Рейтинг: 0 / 0
REST в Ансамбле - че так сложно?
    #39782205
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint,

А че их роутить? На каждый метод свой класс. Просто аргументом этого метода приходит не простой параметр, а дерево объектов json.
...
Рейтинг: 0 / 0
REST в Ансамбле - че так сложно?
    #39782209
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint,

Я имею в виду, что в restful же например для работы, например, с заявкой, будут разные методы типа
PUT /order - создать заявку
POST /order/NNN - редактировать заявку NNN
GET /order/NNN - получить заявку

Мне проще использовать
GET /getorder?id=NNN
POST /saveorder

Потому что в моей практике не всегда операции к CRUD сводятся, там может быть каша всяких действий. Так зачем загонять себя в в эту идеологию ради идеологии?
...
Рейтинг: 0 / 0
REST в Ансамбле - че так сложно?
    #39782271
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н. там может быть каша всяких действий Вот этого, собственно, и рекомендуют избегать - K.I.S.S
Блок А.Н.Мне проще использовать GET / get order?id=NNN Проще, чем GET /order/NNN ?
Блок А.Н. Так зачем загонять себя в в эту идеологию ради идеологии? Одним из недостатков считается отсутствие четкого стандарта ( например, PUT vs POST ). Зачем загоняться, можно придерживаться в нужной вам мере
...
Рейтинг: 0 / 0
REST в Ансамбле - че так сложно?
    #39783281
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
doublefint,

Каша из действий все равно где-то будет. Либо на клиенте, либо на сервере. И мне намного проще делать это на сервере.
Так что я действительно стараюсь сделать проще - спихиваю данные на сервер :-)

>Проще, чем GET /order/NNN ?
В случае getorder не проще. А в случае makeхрензнаетчто просто адекватный путь придумать не получается. А названия пути - это как название метода, уже привычно.

>Одним из недостатков считается отсутствие четкого стандарта ( например, PUT vs POST )
А у RESTFUL есть стандарт? И что он дает?
...
Рейтинг: 0 / 0
REST в Ансамбле - че так сложно?
    #39783293
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н. Каша из действий все равно где-то будет. Либо на клиенте, либо на сервере. Так тренд на то, как я понимаю, чтобы делать это на клиенте. Мол, клиентов много и разных, на всех процессоров не найти, а клиенты пока ответа ждут - ничем не заняты. А так сервер предоставляет узкоспециализированный сервис, делает что-то одно, но быстро - см. микросервисы vs монолит

> А в случае makeхрензнаетчто просто адекватный путь придумать не получается
Ну make сделает на сервере что-то новое, значит уже POST /whateveryouwant, а дальше надо разбираться в разновидностях ХЗЧ из вашей предметной области

> А у RESTFUL есть стандарт?
"Одним из недостатков считается отсутствие четкого стандарта "
И как следствие - практически невозможно автоматически сгенерировать клиент для выставленного REST API
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / REST в Ансамбле - че так сложно?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]