TFFOE / tffoe.github.io

MIT License
0 stars 0 forks source link

Введение в микросервисы #4

Open TFK70 opened 3 years ago

TFK70 commented 3 years ago

С чем связан запрос на фичу?

Учимся работать с данными получаемыми по API Введение в микросервисную архитектуру Создадим небольшой набор микросервисов для работы с данными музыкальных исполнителей с платформы Spotify и дальнейшего использования этих данных на сайтах

Расскажите как вы это себе видите

Настройка окружения в этот раз включает в себя postgresql и mongodb для хранения данных

Приложите примеры реализаций

TFFOE commented 3 years ago

Что такое нормализация данных для данного таска? Это что-то из ML, или здесь вкладывается другой смысл?

TFK70 commented 3 years ago

@TFFOE это приведение данных к удобному для работы виду

TFFOE commented 3 years ago

Авторизацию нужно как-то захардкодить или сделать форму для неё?

TFK70 commented 3 years ago

@TFFOE Ты про токен? Его можно засунуть в переменную окружения

TFFOE commented 3 years ago

@TFK70 да, про него, понял. Пока разбираюсь как добыть этот токен. Так понимаю, в результате вообще не должно быть никакого HTML?

TFK70 commented 3 years ago

@TFFOE А зачем здесь html? И при чем он тут? У тебя просто должны быть сервисы для работы с данными, ты же бэкенд пишешь

TFFOE commented 3 years ago

Окей, дошло до меня наконец

TFFOE commented 3 years ago

Правильно понимаю, что для взаимодействия с БД можно использовать TypeORM?

TorinAsakura commented 3 years ago

@TFFOE Нужно

TFFOE commented 3 years ago

При попытке подключить GraphQL выскакивает такая дичь image Нашёл вот такое решение (работоспособность пока не проверял). Стоит его использовать или в другую сторону копать?

TFK70 commented 3 years ago

@TFFOE А как там apollo оказался? Тебе же только graphql нужен был?

TFFOE commented 3 years ago

@TFK70 Делал по гайду https://docs.nestjs.com/graphql/quick-start Пойду разбираться, в чем ошибся

TFFOE commented 3 years ago

image @TFK70 видимо, graphql всё-таки требует этот apollo

TFK70 commented 3 years ago

@TFFOE да, это я про это не знал, он должен быть ошибку свою гугли, это точно у тебя что-то не так сделано

TFFOE commented 3 years ago

@TFK70 Наконец-то что-то начало получаться. Запрос на spotify делаю через axios и все гуд.

Вопрос появился.

Правильно понимаю, что в соответствии со схемой ниже мне нужно единоразово получить access_token и refresh_token, и после мне больше не потребуется взаимодействовать "руками" со spotify?

Запросы к API делаются, как я понял, при помощи access_token (который действует час), а получаю access_token при помощи refresh_token, который действует хз сколько (вечно?).

image

TFFOE commented 3 years ago

@TFK70 И еще. После разрешения доступа к ответу прилагается code. По нему я получаю токены. Где правильнее хранить эти токены для дальнейшего доступа к ним?

TFK70 commented 3 years ago

@TFFOE Запросы должен делать Mesh - https://www.graphql-mesh.com/docs/transforms/transforms-introduction

Насчет деталей реализации с токенами ничего не подскажу, опять же, сам не дошел

И еще. После разрешения доступа к ответу прилагается code. По нему я получаю токены. Где правильнее хранить эти токены для дальнейшего доступа к ним?

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

TFFOE commented 3 years ago

@TFK70 Т.е. переменные окружения прямо во время работы программы могу задавать, так?

TFK70 commented 3 years ago

@TFFOE не думаю, но этого делать и не надо

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

TFFOE commented 3 years ago

@TFK70 тоже думал про бд, звучит очевидно, просто пока с ними не разобрался

TFFOE commented 2 years ago

@TFK70 Что из себя должны представлять сервисы по работе с данными артиста?

<получение, запись, чтение> - это 1) я получаю данные от spotify 2) записываю их в бд 3) делаю роут и контроллер для доступа к чтению этих данных

Если нужно прочитать данные: 1) проверяю, есть ли они в БД 2/1) если есть, просто отдаю 2/2) если там нет, то: -- делаю запрос к Spotify, получаю данные -- записываю данные в БД -- отдаю их

За каждый из пунктов <получение, запись, чтение> отвечает отдельный сервис

Правильно понимаю?

TFK70 commented 2 years ago

@TFFOE Ты предлагаешь для запроса к базе отдельный сервис поднять? CRUD должен быть внутри одного сервиса, если он там подразумевается

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

Если нужно прочитать данные

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