├── bin
├── cmd
│ └── api
│ ├── errors.go
│ ├── healthcheck.go
│ ├── helpers.go
│ ├── main.go
│ ├── middleware.go
│ ├── movies.go
│ ├── routers.go
│ └── server.go
├── go.mod
├── go.sum
├── internal
│ ├── data
│ │ ├── filters.go
│ │ ├── models.go
│ │ ├── movies.go
│ │ └── runtime.go
│ ├── jsonlog
│ │ └── jsonlog.go
│ └── validator
│ └── validator.go
├── Makefile
├── migrations
├── README.md
└── remote
binсобственно скомпилированный проект, подготовленный для деплоя например на продcmd/apiкод самого приложения. Код для запуска сервера, чтения http запросов и аутентификацииinternalсвязанные вспомогательные пакеты для АПИ. Код взаимодействия с базой, валидация, отправка имейлов... Короче все что не специфично именно для этого приложения, всякое что можно переиспользовать где угодно еще. Отсюда будет импортироваться код вcmd/api, НО ни кода не наоборот!migrationдля SQL миграций тут ничего хитрогоremoteконфиги и скрипты для продакшенаgo.modсобственно файл модуляMakefileбилдер сценарий
| Method | URL Pattern | Handler | permission | Action |
|---|---|---|---|---|
| GET | /v1/healthcheck | healthcheckHandler | Выведем немного информации о проекте | |
| GET | /v1/movies/:id | showMovieHandler | movies:read | Показать детали конкретного фильма |
| GET | /v1/movies | listMoviesHandler | movies:read | Отобразить все фильмы с фильтрами |
| POST | /v1/movies | createMovieHandler | movies:write | Создать новый фильм |
| PATCH | /v1/movies/:id | editMovieHandler | movies:write | Обновить информацию о фильме |
| DELETE | /v1/movies/:id | deleteMovieHandler | movies:write | Удалить фильм из базы |
| POST | /v1/users | registerUserHandler | Добавить нового пользователя | |
| PUT | /v1/users/activated | activateUserHandler | Пользовательская активация аккаунта | |
| POST | /vq/tokens/authentication | createAuthenticationTokenHandler | Генерация stateful authentication token | |
| GET | /debug | expvar.Handler() | Отображение метрик приложения |
тулинг для миграции https://github.com/golang-migrate/migrate
$ migrate -path=./migrations -database=$GL_API_DSN upпример 1:
/v1/movies?title=godzilla&genres=scifi,drama&page=1&page_size=5&sort=-year
| Ключ | Описание |
|---|---|
| level | Уровень лога (INFO, ERROR, FATAL) |
| time | UTC время |
| message | сообщение в свободной форме |
| properties | дополнительные параметры например ключ\значения |
| trace | стек вызова для отладки |
| Сигнал | Описание | ярлык | перехват |
|---|---|---|---|
| SIGINT | Interrupt - прервано с клавиатуры | Ctrl+C | Да |
| SIGQUIT | Quit - выход в клавиатуры | Ctrl+\ | Да |
| SIGKILL | Kill - прибить процесс | Нет | |
| SIGTERM | Terminate - еще один сигнал завершения | Да |
POST /v1/users
{
"name": "Test test",
"email": "test@example.com",
"password": "password"
}