Задача: создать REST API с CRUD, который будет позволять получать информацию про пользователей и статьи из PostgreSQL
Хотим собрать веб-сервер, который будет взаимодействовать с окружающим миром через API, поддерживающий REST
- user - пользователь
- article - статья
Будет существовать следующие запроса для статьи:
- GET
http://localhost:8080/api/v1/articles
- возвращает json со всеми статьями. - GET
http://localhost:8080/api/v1/articles/{id}
- возвращает информацию о статье сid
, если такой статьи нет, то сообщаем об этом. - POST
http://localhost:8080/api/v1/articles/
- создаём новую статью - PUT
http://localhost:8080/api/v1/articles/{id}
- обновляем информацию об уже существующей статье сid
, если такой статьи нет, то сообщаем об этом. - DELETE
http://localhost:8080/api/v1/articles/{id}
- удаляем статью сid
, если такой статьи нет, то сообщаем об этом.
Будет существовать следующие запроса для пользователей:
- POST
http://localhost:8080/api/v1/user/register
- регистрируем нового пользователя. - POST
http://localhost:8080/api/v1/user/auth
- авторизация пользователя.
Маршрутизатор (router) - это экземпляр, который имеет внутренний функционал, заключающийся в следующем:
- принимает на вход адрес запроса (по сути это строка
http://localhost:8080/api/v1/articles
) и вызывает исполнителя, который будет ассоциирован с этим запросом.
Исполнитель (handler) - это функция/метод, который вызывается маршрутизатором.
Для того чтобы удобно работать с маршрутизатором и не писать с нуля, будем использовать готовую
библиотеку github.com/gorilla/mux
:
go get -u github.com/gorilla/mux
Для работы с JWT токеном будем использовать следующие пакеты:
go get -u github.com/auth0/go-jwt-middleware
go get -u github.com/form3tech-oss/jwt-go
Завернем необходимые HTTP-хендлеры в JWT-декоратор. Для того чтобы обозначить факт необходимости использования JWT токена
перед выполнением какого-либо запроса.
Заверните HTTP-хендлер в декоратор JWTMiddleware.Handler(h http.Handler) http.Handler
app.router.Handle(
prefixApi+"/articles/{id}",
middleware.JwtMiddleware.Handler(
http.HandlerFunc(app.GetArticleById),
),
).Methods("GET")
В Postman'e получите JWT токен и используйте его на вкладке "Headers", добавив таким образом:
Authorization: Bearer <your_token_from_auth>
Используйте следующую команду для создания миграции:
make migrate-create name=ArticleCreation
Используйте следующую команду для создания миграции:
make migrate-up
Используйте следующую команду для создания миграции:
make migrate-down
Коллекция Postman лежит в директории /postman
. Там находится json-файл для импорта в Postman и дальнейшей работы с ним.