Использование gRPC с трехкомпонентной службой API для передачи данных

Введение

В этом уроке мы рассмотрим процесс создания службы передачи файлов с использованием Go и gRPC. Этот сервис позволит клиентам загружать файлы, хранить метаданные в базе данных AWS RDS и сохранять файлы в AWS S3. Мы подробно рассмотрим каждый шаг: от определения API до реализации серверных и клиентских приложений.

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

Предпосылки

Прежде чем мы начнем, убедитесь, что у вас есть следующие предварительные условия:

  • Перейдите и настройте gRPC на своем компьютере.
  • Учетные данные AWS, настроенные как переменные среды
  • Установка необходимых библиотек Go:
go get -u google.golang.org/grpc
go get -u github.com/aws/aws-sdk-go-v2

Структура проекта

Наш проект будет состоять из двух отдельных баз кода: одной для сервера и одной для клиента. Вы можете настроить это так, как хотите, опять же — примеры и код в этом посте служат для вас руководством (не дословно), и я ожидаю, что вам будет легко его принять и изменить по мере необходимости. >

Структура каталогов сервера:

file_transfer_server/
|-- api/
|   |-- file_transfer.proto
|-- start_upload.go
|-- upload.go
|-- finish_upload.go
|-- main.go

Структура клиентского каталога:

file_transfer_client/
|-- pb/
|   |-- file_transfer.pb.go
|-- start_upload_client.go
|-- upload_client.go
|-- finish_upload_client.go
|-- main.go

В каталоге сервера у нас есть отдельный файл для каждой реализации API (start_upload.go, upload.go и finish_upload.go). Файл main.go действует как точка входа для серверного приложения.

Каталог клиента содержит сгенерированный код gRPC (file_transfer.pb.go) и отдельные файлы для каждой реализации клиентского API. В…