dmishashkov / Golang-API

Simple RestAPI

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

API проект с CRUD операциями и JWT аутентификацией

Вкратце о чём проект

В этом API пользователи могут регистрироваться и добавлять, удалять, изменять, получать "статьи", для простоты у статьи есть тело (body) и заголововок (title), аутентификация осуществляется при помощи JWT токена, само API написано при помощи популярной библиотеки gin.

Эндпоинты

Почти все эндпоинты защищены в зависимости от их типа (например, получать статьи может вообще любой человек, даже не зарегестрированный, но удалять статьи может только аутентифицированный пользователь, причём тот который и является автором)

Аутентификация

Пароли шифруются при помощи base64 и дальше хранятся только их хэши и при аутентификации они сравниваются, также есть проверка что регистрироваться второй раз нельзя (с одним и тем же логином), после аутентификации пользователю высылается JWT-токен, который он должен передавать на сервер каждый раз при запросе

База данных

Используется Postgres. Все данные для базы данных и JWT токена хранятся в dotenv файле, который при запуске все нужные переменные засылает в переменные окружения, откуда они читаются из программы

Запрос к серверу

Запрос к серверу в случае защищенного эндпоинта должен содержать JWT токен, который выдается после аутентификации в хедере Authorization и имеет вид: "Bearer: 'token' ". Для POST и PUT запросов нужно указать в теле JSON с данными ( поля body и title)

Ответ от сервера

Имеет два поля: error и body в случае ошибки в error будет записана ошибка в виде строки, и поля body не будет либо будет пустым массивом, в случае успеха там будет ответ от сервера (массив статей в случае GetArticles, например), а поля ошибки не будет

Краткое описание эндпонитов

POST /auth/signup

Создаёт пользователя по заданному в форме паролю и логину (если пользователь с таким логином уже есть, то вернёт ошибку)

POST /auth/signin

аутентифицирует пользователя по логину и паролю, возвращает JWT токен для аутентификации

GET /articles

Возаращет все статьи (или ошибку если статей нет)

GET /articles/:id

Возвраащет статью с указанным id (или ошибку если статьи нет)

Защищенные эндпоинты

PUT /article/:id

Изменяет статью в соответствии с указанными данными (возвращает ошибку если статьи нет). Изменять может только создатель статьи

DELETE /article/:id

Удаляет статью с указанным айди (возвращает ошибку если статьи нет). Удалять может только создатель статьи

POST /article

Создаёт статью по указанным данным в запросе

About

Simple RestAPI


Languages

Language:Go 97.6%Language:Dockerfile 2.4%