Skip to content
CRUD manager for MySQL working by HTTP
Go
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
explorer
.gitignore
.travis.yml
README.md
go.mod
go.sum
main.go
main_test.go

README.md

Travis

dbExplorer

Bеб-сервис будет представляющий собой менеджер MySQL-базы данных, который позволяет осуществлять CRUD-запросы (create, read, update, delete) к ней по HTTP

Для пользователя это выглядит так:

  • GET / - возвращает список все таблиц (которые мы можем использовать в дальнейших запросах)
  • GET /$table?limit=5&offset=7 - возвращает список из 5 записей (limit) начиная с 7-й (offset) из таблицы $table. limit по-умолчанию 5, offset 0
  • GET /$table/$id - возвращает информацию о самой записи или 404
  • PUT /$table - создаёт новую запись, данный по записи в теле запроса (POST-параметры)
  • POST /$table/$id - обновляет запись, данные приходят в теле запроса (POST-параметры)
  • DELETE /$table/$id - удаляет запись
  • GET, PUT, POST, DELETE - это http-метод, которым был отправлен запрос

Особенности работы программы:

  • Роутинг запросов - руками, никаких внешних библиотек использовать нельзя.
  • Полная динамика. при инициализации в NewDbExplorer считываем из базы список таблиц, полей (запросы ниже), далее работаем с ними при валидации. Никакого хадкода в виде кучи условий и написанного кода для валидации-заполнения. Если добавить третью таблицу - всё должно работать для неё.
  • Считаем что во время работы программы список таблиц не меняется
  • Запросы придётся конструировать динамически, данные оттуда доставать тоже динамически - у вас нет фиксированного списка параметров - вы его подгружаете при инициализации.
  • Валидация на уровне "string - int - float - null", без заморочек. Помните, что json в пустой итнерфейс распаковывает как float, если не указаны спец. опции.
  • Вся работа происходит через database/sql, вам на вход передаётся рабочее подключение к базе. Никаких orm и прочего.
  • Все имена полей так как они в базе.
  • В случае если возникает ошибка - просто возвращаем 500 в http-статусе
  • Не забывайте про SQL-инъекции
  • Неизвестные поля игнорируем

Стек технологий:

  • Golang;
  • MySQL – СУБД;
  • Github – репозиторий для кода;
  • Docker - ПО для контейнеризации;
  • Docker-compose – пакетный менеджер для Docker;
  • Travis CI – сервис для сборки и тестирования ПО.

Deploy

$ cd ~
$ git clone https://github.com/chahkiev/dbExplorer.git
$ cd dbExplorer/
$ go mod download
$ go build -o main .
$ docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 -e MYSQL_DATABASE=golang -d mysql
$ DB_ADDRESS=127.0.0.1 DB_PORT=3306 DB_PASSWORD=1234 ./main

Testing

$ cd ~
$ cd dbExplorer/
$ docker run -p <port>:3306 -e MYSQL_ROOT_PASSWORD=1234 -e MYSQL_DATABASE=golang -d mysql
$ DB_ADDRESS=127.0.0.1 DB_PORT=<port> DB_PASSWORD=1234 go test -v
You can’t perform that action at this time.