Система для добавления и чтения постов и комментариев с использованием GraphQL на Go.
- Docker 19.03.0+
- Docker Compose 1.25.0+
- Make
git clone https://github.com/bitbox228/social-media-api
Перед запуском приложения, нужно прописать конфиг и .env файл. Примеры, которые можно использовать:
.env
PG_USER=postgres
PG_PASSWORD=qwerty
PG_DB=postgres
PG_URL=postgres://postgres:qwerty@postgres:5432/postgres?sslmode=disable
config/config.yaml
http:
port: '8000'
postgres:
username: 'postgres'
host: 'postgres'
port: '5432'
dbname: 'postgres'
sslmode: 'disable'
poolmax: 5
repository:
type: 'postgres'
При конфигурации можно выбрать тип хранения данных. Тип postgres
для хранения данных в БД PostgreSQL.
repository:
type: 'postgres'
Для In-Memory хранилища:
repository:
type: 'inmemory'
-
Удостоверьтесь, что файл
.env
лежит в корне проекта и содержит нужные переменные среды (можно использовать пример выше).touch .env echo "PG_USER=postgres" >> .env echo "PG_PASSWORD=qwerty" >> .env echo "PG_DB=postgres" >> .env echo "PG_URL=postgres://postgres:qwerty@postgres:5432/postgres?sslmode=disable" >> .env
-
Соберите приложение:
make build
-
Запустите приложение:
make up
-
Для остановки приложения напишите:
make down
Приложение предоставляет GraphQL ручку, а так же GraphQL Playground для удобного тестирования.
- GraphQL ручка: http://localhost:8000/graphql
- GraphQL Playground: http://localhost:8000/
Спецификация API есть на Graphql Playground.
Доступны для получения списком или по одному посты и комментарии. Для списков доступны параметры для пагинации а так же фильтры, например фильтр по UserID для постов.
query Comments {
comments(filter: { postID: "5" }, limit: 10, offset: 0) {
id
userID
postID
parentID
body
}
}
В запросе выше выводится список комментариев к посту с ID = 5, при этом выводятся первые 10 элементов, начиная с 0-го.
Доступны мутации по созданию постов, комментариев к постам и реплаев к комментариям, а также отключение/включение комментариев к постам.
mutation CreateComment {
createComment(
input: { userID: "5", postID: "10", body: "Hello, I'm new here >.<" }
) {
id
body
}
}
В запросе выше создается коментарий от пользователя с ID = 5 к посту с ID = 10, возвращает мутация ID и тело комментария.
Есть возможность подписаться на обновления поста для получения новых комментариев под этим постом.
subscription {
newComment(userID: 1 postID: 1) {
id
body
}
}
Пользователь может подписаться на конкретный пост только один раз, поэтому нужно указывать ID пользователя и поста.