Группа единомышленников фреймворка Symfony. Здесь вы можете поделиться опытом работы с фреймворком или задать любой интересующий вопрос ;) По всем вопросам: @sovetit
генерить doc.json то я могу
https://symfony.com/bundles/NelmioApiDocBundle/current/index.html
что и пытаюсь сделать
поле с типом json в openapi отдается как object, что приводит к ошибке @OA\\Items() parent type must be "array" in
#[ORM\Column(type: Types::JSON, nullable: true, options: [
'jsonb' => true,
])]
private array $field = [];
if ($parent instanceof Schema && $parent->type !== 'array') {
$this->_context->logger->warning('@OA\\Items() parent type must be "array" in ' . $this->_context);
$valid = false;
}
Кстати, мы немного о разных вещах говорим)
Я имел ввиду не отправку одного сообщения со всем данными для него, вместо кучи маленьких
У Кафки есть отправка вообще всех типов сообщений с каким-то интервалом чтобы пачкой
В таком случае с коммитом офсета выигрыша не будет, так как по сути это те же сообщения, которые могут быть вообще в разные топики, и каждый из них будет обрабатываться отдельно
Хотя как раз таки при батче однотипных и будет выигрыш с оффсетом - действительно, надо поразбираться. Может об одном говорим просто кто на что смотрит)
https://kafka.apache.org/protocol#protocol_batching
Но как идея осталась - может в вашем случае будет полезно :)
Читать полностью…Можно вроде как мессенджером разрулить, он умеет формировать батчи и обрабатывать отдельным хандлером
Читать полностью…Есть вариант между
Открывать между сервисами авторизованный туннель как долгоживущие соединение и по нему слать несколько запросов подряд
у меня не уровень вайлдебрис
но и не уровень советов Михи когда он пишет что это оверхед
если я по одному буду отправлять, я точно положу тот сервис)
но я бы хотел чтобы например какой нить retry там поймался из-за кривого алгоритма другого сервиса потому что он 400 поймал
Читать полностью…в плане реализации я могу хоть что сделать)
но например в дашбордах если я вижу 400 ошибки я быстро на них реагирую
и в эластике я агрегирую какие чаще всего ошибки по 400
из этих соображений это точно 400 а не 200
Да мне кажется не надо что-то изобретать.
1) валидация входных данность на корректность - это дешёвая операция, ее можно провести до обработки, поэтому сразу проверяем запрос и абортом с 400
2) под капотом, если у вас просто последовательно выполняются операции над каждым - то так и проходим и заполняем данные для ответа - такой-успешно, такой-не успешно
3) дальше уже ваша точка зрения, считаете ли вы частично обновлённое - успешным запросом? 2хх и перечисляем результаты для каждого
Если нет - 4хх (выбрать подходящий отдельный, не используемый что ли, хотя мб есть общепринятый, но так как у каждого может быть разный, например где-то доступ 401, где-то что-то ещё) и некорректные.
С точки зрения потребителей разницы как таковой нет, что я буду по массиву проходить своему и смотреть, есть ли он в списке фейлов, если нет - логировать успех, если да - дальнейшие действия.
Что я буду проходить по массиву результатов и на месте обрабатывать по порядке.
Что там, что там, мне скорее всего придется мапу собирать, так как мне нужно связать ответ и элементы у меня, но это в целом не важно (чтобы обогатить для логов внутренними данными моей системы)
Мне кажется я придумал промт: я буду просить gpt давать ответ на основе анализа этих документации )
Читать полностью…На примере апи обновления стоков
https://docs.ozon.ru/api/seller/#operation/ProductAPI_ProductsStocksV2
400 если при валидации на весь запрос
Если ошибка глубже - 200 с результатами как успешных так и нет
https://dev.wildberries.ru/openapi/work-with-products/#tag/Ostatki-na-skladah-prodavca/paths/~1api~1v3~1stocks~1{warehouseId}/put
ВБ, 400 на весь, если запрос некорректен, 409 если уже дальше ошибка, и только неправильные
https://developers.avito.ru/api-catalog/stock-management/documentation#ApiDocumentationBlock
Авито 400 на весь запрос, если дальше - 200 с результатами
Это, конечно, не бест практис, но как делают крупные игроки :)
Возможно даже об одном и говорите. Там же в кафке полинг, флаш. Можно принудительно, можно автоматом, можно каждое можно нет. И это все дефолтное апи, а не отдельное батч апи.
Там под капотом продюсер копит в себе сообщения, если не принудительно отправлять по одному.
Но может я и ошибаюсь, мало с ней работал
Хотя это асинк и тоже свой соответствующий оверхед. Но это так, друг полезно будет 😅
Читать полностью…Правда я не стал имплементировать, коллега предложил - посовещались и из-за специфики проекта не стали так делать
Читать полностью…https://symfony.com/doc/current/messenger.html#process-messages-by-batches
Читать полностью…Кстати да, но мне в голову в первую очередь пришла нагрузка на сеть 😅
Читать полностью…у кафки там при отправке по одному идет доп запрос на коммит
он больше проблем делает если по 1му слать
Перечисленные товарищи обычно используются с большими нагрузками, для них важно иметь большой тротпут
Смотрите, та же Кафка с каждым запросом отправляет заголовки, которые весят, какое-то число
При 1000 запросов мы отправим 1000 таких заголовков, это значительный оверхед.
При батче понятно дело 1 заголовок и большое тело.
А так как заточено обычно все это дело под большой тротпут - мы должны минимизировать это
Но на маленьких объемах, как сказал Павел, это не сыграет роли.
Так как выигрыш будет незначителен.
И ладно в кафке все это есть под капотом, мы не паримся, он собирает и отправляет пачкой сам при настройке
А в приложении это реализовывать самому и стоит ли игра свеч - главный вопрос.
Им - да. Это потоковое и просто нагруженное. Нам - вопрос
лично в моей голове, если он целиком не обработался это нифига не 200 )
Читать полностью…Имхо, конечно, что кмк батч обновление товаров оно подразумевает, что часть может быть с ошибкой, часть нет
Если запрос дошел до фактической обработки, то есть корректный и т.д. - значит успех 2хх, а что конкретно по каждому не так прошло - это уже как раз результат поэлементно внутри бади разбирать
Есть мысли какие зарубежные мануалы можно закинуть? Типа амазона
Читать полностью…пофиксил отправку? мы дальше отправлять заказы не можем?
Читать полностью…