- флаг
-a
- SERVER_ADDRESS - адрес запуска сервера (по умолчанию - 127.0.0.1:8080) - флаг
-b
- BASE_URL - базовый адрес сокращённого URL (по умолчанию - http://127.0.0.1:8080) - флаг
-d
- DATABASE_DSN - адрес подключения к БД (PostgreSQL v.10+) (по умолчанию - "", т.е. работаем без БД) - флаг
-f
- FILE_STORAGE_PATH - файл хранения сокращённых URL (по умолчанию - "", т.е. работаем без файла)
/cmd/shortener/
- здесь содержится код, который компилируется в сервер.
пример: go run main.go -a=127.0.0.1:54345 -b=http://127.0.0.1:54345 -f=test.file
Переменные среды имеют приоритет над флагами.
пакет содержит все маршруты web-сервера, их обработчики и помощники.
пакет содержит все структуры данных и методы для работы с ними, поддерживаются хранилища:
- в оперативной памяти (RAM),
- в текстовом файле,
- на сервере баз данных.
Их надо предварительно зарегистрировать в модуле:
go get github.com/go-chi/chi/v5
go get github.com/go-chi/chi/v5/middleware
go get github.com/stretchr/testify/assert
go get github.com/stretchr/testify/require
Эндпоинт GET /api/user/urls
считывает UserID
из cookie
запроса и выдаёт все URL, сохраненные этим пользователем
в формате массива JSON-структур {"short_url":"<some_shorten_url>","original_url":"<some_original_url>"}
Эндпоинт GET /{id}
принимает в качестве параметра идентификатор сокращённого URL и
возвращает ответ с статусом 307
и оригинальным URL в HTTP-заголовке Location
Эндпоинт GET /ping
проверяет доступность базы данных, выдает ответ с статусом 200
,
если доступна, и 500
- если не доступна
Эндпоинт POST /
принимает в теле запроса в виде текста строку URL для сокращения и
возвращает ответ с кодом 201
и сокращённым URL в виде текстовой строки в теле пакета
Эндпоинт POST /api/shorten
- аналогичен предыдущему, но принимает в теле запроса JSON-объект {"url":"<original_url>"}
и возвращает в теле ответа JSON-объект {"result":"<shorten_url>"}
Эндпоинт POST /api/shorten/batch
, принимает в теле запроса множество URL для сокращения
в формате массива JSON-структур {"correlation_id":"<some_id>","original_url":"<some_original_url>"}
и
возвращает сокращенные URL в формате массива JSON-структур {"correlation_id":"<some_id>","short_url":"<some_shorten_url>"}}
Эндпоинт DELETE /api/user/urls
, принимает задания на удаление списка ранее сформированных URL,
выдаёт ответ со статусом 202
, после чего в асинхронном режиме удаляет записи из базы