Системный сервант – Telegram
Системный сервант
2.78K subscribers
22 photos
52 links
Заметки про IT, системный анализ и интеграции

Если вам нравятся мои материалы и вы хотите меня отблагодарить - буду рада вашим донатам:
https://yoomoney.ru/fundraise/1AG54A24D2C.250526
paypal.me/TatianaS44


Связаться @tsalnikova
Рекламу не продаю
Download Telegram
Чем опасен PATCH?

На собеседованиях часто спрашивают, чем отличается PUT от PATCH.

Самый простой ответ - что PATCH предназначен для частичного изменения ресурса, в то время как PUT всегда меняет ресурс полностью.

Рассмотрим пример ресурса с пользователем:

{
"id": 1,
"name": "John Doe",
"email": "john@example.com",
"phone": "12345678"
}


Метод PATCH может позволять менять параметры ресурса по отдельности.


PATCH /users/1

{
"email": "newemail@example.com"
}


PUT же требует отправки всех полей ресурса, даже если меняется только одно из них.

На этом уровне кажется, что PATCH - хороший способ оптимизировать размер запросов и увеличить гибкость API.

Но если копнуть немного глубже, то появляется идемпотентность. Операция считается идемпотентной, если её повторное выполнение не изменяет результат после первого применения.

PUT должен быть всегда идемпотентным. В то время как идемпотеность PATCH зависит от реализации. Эта вариативность тоже добавляет гибкости, но несет больше рисков и требует больше внимания команды к разработке и поддержке таких методов.

Также, даже если мы сделали PATCH идемпотентным, его применение может привести к нарушению целостности данных. Допустим, мы делаем вызов с удалением email:


PATCH /users/1

{
"email": null
}


Примерно в это же время кто-то сделал другой вызов, с удалением номера телефона:


PATCH /users/1

{
"phone": null
}


Однако, по бизнес-правилам у пользователя должен быть заполнен либо email, либо телефон.

Значит, надо это заранее продумать и добавить дополнительную проверку в момент транзакции в БД. В то время как в методе PUT мы бы могли ограничиться валидацией на поля запроса.

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

Таким образом, PATCH - гибкий и мощный инструмент HTTP, но использовать его стоит с осторожностью. И точно не стоит его применять по умолчанию везде, где нужно обновление ресурса.
👍52🔥132🤔1
Как познакомиться с GraphQL:

1. Посмотреть вебинар.
2. Почитать официальную документацию(она короткая, но на английском).
3. Потренироваться на тестовых и открытых API:
▫️ Тестовый API выдуманной горнолыжной базы - https://snowtooth.moonhighway.com/,
▫️ SWAPI на GraphQL - https://graphql.org/swapi-graphql/,
▫️ API GitHub - https://docs.github.com/ru/graphql/overview/explorer,
▫️ Еще много открытых API: https://github.com/graphql-kit/graphql-apis (не все сейчас работают, но какие-то можно посмотреть).

Тестовые и открытые API взяты из книги “GraphQL” Алекс Бэнкс, Ева Порселло - ее можно почитать, если хочется углубить знания технологии.
22🔥13👍8
Села обновлять своё резюме для международного рынка и выяснила, что первый в гугл-выдаче сайт для создания резюме Resume.io — это скам. Как пишут на Reddit, он предлагает за 2 доллара один(!) раз скачать резюме в pdf, а после еще списывает 20$ якобы за подписку. В общем, будьте осторожны.

В целом выяснилось, что генерировать резюме онлайн - не лучшая идея, так как такие документы не проходят ATS. Эти системы плохо считывают информацию из сложных и красивых файлов. Автоматические скрининги лучше всего проходят простые классические резюме.

Такие шаблоны можно найти, например, вот тут:

- Microsoft CV templates
- Google Docs Templates
- https://resumeworded.com/resume-templates

Еще в ЕС есть стандарт резюме, который называется Europass. Его можно бесплатно создать на официальном сайте https://europass.europa.eu/en.

Только начала разбираться в этой теме и много еще не понятно. Например, как толково описать 9 лет опыта в 4х компаниях в одностраничном формате. Или как не умереть, редактируя свое резюме под каждую компанию и ее ATS. Если у кого-то есть хорошие советы/ссылки/инструменты по этой теме - делитесь в комментариях🤗.
👍25🔥92
Мне сложно дается грамотное ведение LinkedIn, поэтому решила поучаствовать в прожарке профилей в прямом эфире AgileFluent. Мой и еще 10 профилей разберет эксперт по международному найму🫣.

Страшно, конечно, но обещают много полезного. Расскажут, как вести эту хитрую соцсеть так, чтобы рекрутеры всех стран хотели нас схантить.

Приходите посмотреть на мой позор 17 декабря в 19:00 Мск в канале ребят. Все подробности и канал тут.

UPD: Запись эфира https://youtu.be/ci_YU9hpCmI
🔥31🗿5🤣3👏2👌2💊1
О КАНАЛЕ И АВТОРЕ

Привет!

Меня зовут Таня, я системный и бизнес-аналитик, занимаюсь разработкой IT-систем с 2015 года. Работала в ритейле, строительстве и финтехе.

Это мой авторский блог, который я веду с 2019 года в формате хобби. Я не покупаю и не продаю рекламу, но иногда могу анонсировать мероприятия коллег.

Я пишу о том, что мне кажется интересным. И последние несколько лет меня увлекают вопросы интеграций систем. Но не исключено, что в какой-то момент тут станет больше контента про бизнес-анализ, менеджмент или программирование🙈.

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

Очень благодарна вам за то, что читаете этот канал, оставляете реакции и комментарии - это очень важно для меня❤️.

Предлагаю в комментариях нам познакомиться: напишите о себе, почему вы читаете этот блог, о каких темах вам было бы интересно узнать в следующих постах? Или что-то, что хочется тут написать. Буду рада знакомству и общению🤗.

LinkedIn
Хабр
Medium (eng)
Донаты: ЮMoney | PayPal
91👍19🔥10
Пока ничего содержательного не пишется, поделюсь своими любимыми околорабочими мемами. И вы делитесь в комментариях!
😁41🔥9🤣51
Какого размера должны быть микросервисы?

Несколько лет назад я уже писала о своем опыте работы с MSA. Там про знакомство и взаимодействие аналитика с микросервисами. Сейчас опыта стало побольше и хочется поговорить про то, как размер сервисов влияет на разработку.

Название архитектурного паттерна как бы намекает, что сервисы в MSA должны быть небольшими. Но что значит небольшим? И в масштабах какой системы?

По канонам, сервис может считаться микросервисом, если он соответствует основным принципам MSA:

- Он имеет чёткие границы и сферу ответственности,
- он независимо развертывается,
- у него своя база данных,
- он взаимодействует с другими сервисами через API.

То есть про размер ничего нет. Ни в большую, ни в меньшую сторону.

В рекомендациях часто косвенно связывают размер микросервиса с размером команды. То есть команда, разрабатывающая 1 (и в идеале только 1) микросервис, должна быть 6-12 человек (правило 2х пицц). И, кажется, что это правило - результат сложного опыта и ошибок.

Иногда разработчики делают микросервисы настолько маленькими, что между ними возникает большая и разветвленная сеть APIs. Происходит много сетевых вызовов, сервисы ломают друг друга, команды много и неэффективно общаются между собой. То есть сервисы зависят друг от друга и мы получаем распределенный монолит. Хотя формально эти сервисы соответствуют принципам MSA, но фактически такая архитектура противоречит смыслу разработки микросервисов - она не избавляет систему от зависимостей, но увеличивает ее сложность за счет интеграций и инфраструктуры.

Бывают и обратные ситуации. В примерах микросервисов часто можно увидеть такие агрегаты, как Оплата, Заказ, Доставка, Склад и др.

При определенном масштабе системы такие бизнес-функции могут включать в себя много сложной логики.

Например, платежный микросервис будет содержать данные об оплатах, проверки транзакий, интеграции с платежными шлюзами, бухгалтерией, антифродом и пр. То есть на выходе получается не то чтобы “микро-” сервис.

И если с этим справляется одна двухпиццевая команда, то все отлично - сервис автономен, не сильно зависит от других сервисов и представляет сам по себе ценность для бизнеса.

Но системы имеют свойство развиваться. И в какой-то момент 12 человек уже может не хватать, чтобы поддерживать всю логику и контракты. Команда вырастет, незаметно для всех разобьется на подкоманды, каждая со своей зоной ответственности. Эти подкоманды начнут друг другу мешаться, долго разрабатывать и еще дольше деплоить. В результате получится мини-монолит в микросервисной шкуре.

Можно, конечно, попросить системных аналитиков держать всю эту махину под контролем. Но иногда и их ресурсов не хватает, чтобы осознать, запомнить и задокументировать весь контекст “микро-”сервиса. В таких случаях рекомендуют распиливать получившийся мини-монолит - скорее всего, образуя из подкоманд отдельные команды.

В общем, микросервисы это и так сложно, а тут еще приставка “микро-” сильно сбивает с толку.

Например, на одном моем проекте распределенную систему из “среднего” размера сервисов причисляли к SOA-паттерну. Хотя там не было ни ESB-шины, ни общих баз данных, ни централизованной оркестрации. По факту это была распределенная система из микросервисов и мини-монолитов, которые все вместе вполне отвечали принципам MSA.

По моему опыту все-таки лучше иметь дело с мини-монолитами, чем собирать слово “Вечность” из слишком мелких и сильно связанных микросервисов.

Многие эксперты тоже советуют “не мельчить”, например здесь и здесь.

А с какими микросервисами вы сталкивались в своей практике? И как вам такой опыт?
👍2511🔥3
Курсы по основам программирования

Решила освежить базу и пройти легендарный гарвардский курс CS50: Introduction to Computer Science.

Пока прослушала половину лекций и мне все очень нравится.

Курс бесплатный и очень качественный. Особенно ценно, что он обновляется каждый год и дает актуальную информацию и современные примеры.

Из возможных сложностей отмечу, что материала много и он на английском. Но английский очень понятный, B1 должно спокойно хватать. Есть перевод на русский от JavaRush, но там версия 2015го года.

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

Мне кажется очень грамотным, что основы программирования начинают объяснять на примере C, а не Python, как это делается в большинстве современных стартовых курсов. Потому что на C все расписывается подробно и долго — а это очень помогает усвоению информации.

Также полезно понимать, как работают функции, встроенные в высокоуровневые языки. А С — это отличный способ разобраться в фундаменте работы программиста. Ведь многие интерпретаторы и компиляторы написаны на C (в том числе Python). И С все еще остаётся базовым языком операционных систем и низкоуровневых библиотек.

Помимо C, в курсе рассказывают про Python, память, алгоритмы, структуры данных, SQL, HTML, CSS и JavaScript. То есть информации много и даже если посмотреть только лекции — вполне можно получить общее представление об ИТ.

Отдельного восхищения достойны лектор Дэвид Мэлэн и организаторы — прекрасная подача материала и техническая подготовка. Как будто ты смотришь стендап-концерт, а не лекции по основам информационных технологий.

В общем, рекомендую.

А если CS50 кажется сложноватым — можно посмотреть на эти курсы:

🐤 ITProger: все коротко, без подробностей и иногда не очень связно, но бесплатно.
🐤 Wexler: программа хорошая, бесплатные пробные уроки понравились, но дороговато.
🐤 Udemy: программа неплохая, ее можно взять за основу самостоятельного обучения. Сами мини-лекции мне показались поверхностными и нудными.
Please open Telegram to view this post
VIEW IN TELEGRAM
22🔥14👍9🙏1