Ребят, что-то вчера такой идеалогический вопрос подъехал в голову: на каком уровне абстракции вы пишите клиенты под сервис(-ы) API?
Я сейчас больше не про крудошлепство, а про серьезные сущности.
По сути, можно, наверное идти в 3 направления:
1. Пишем клиент, который абстрагирует ТОЛЬКО роутинг и отправку (т.е. мы отправляем по сути сырые данные и получаем HTTP Response), все остальное (логика сборки данных, парсинга ответа) - дело системы автоматизации
client.entity.create( { name: test, lname: test })2. Пишем клиент, где абстрагируем уже уровни сущностей и вводим DTO: например, запрос принимает не SpecialDataClassRequest и возвращает уже не HTTP Response, а SpecialDataClassResponse
e: Entity = Entity(name="test", lname="test")
client.entity.create(e)
3. Пишем клиент, где абстрагируем уровень сборки сущностей: мы просто через какую-то фабрику/строитель(паттерны) накидываем, что то типа:
e = client.entity(). \
.set_name() \
.set_lname() \
.build() \
client.entity.create(e)
Мне кажется, для нужд тестирования(особенно в негативном направлении), лучше использовать клиент чисто для роутинга, без какого-либо пост-пре процессинга.
С другой стороны, у меня часто бывает, что клиенты "выплывают" наружу и им начинают пользоваться сначала коллеги, потому вообще как SDK в open source.
Есть идеи?