An open API service indexing awesome lists of open source software.

https://github.com/evillord666/weblifo

Lifo (stack) with Web interface (REST API) and Postgres
https://github.com/evillord666/weblifo

docker-compose docker-golang docker-golangweb go-template go-tutorial go-web-application rest-api rezonit

Last synced: about 1 month ago
JSON representation

Lifo (stack) with Web interface (REST API) and Postgres

Awesome Lists containing this project

README

          

# WebLiFo

`Web-интерфейс` (`REST API`) для управления `LIFO` (`Last In First Out` - стэк), написанный на `go`.
`WebLiFo` `REST API` оперирует ресурсом `lifo` - `/api/lifo`

## 1. Основные характеристики объектов можели данных `lifo` и `item`

* наименование (название стэка) - поле `name` (`string`);
* описание (краткая характеристика) - поле `description` (`string`)
* размер (глубина) `lifo` в ячейках - `size`;
* элементы стека - `item` тип данных (т.е. то что находится в ячейке `LIFO`) - `[]byte`

## 2. Ограничения

* мы не задаем ограничения элементов стэка по размеру, т.е. элементами стэка могут быть слайсы
байт произвольной длины (размера);
* данные будут храниться в таблицах БД (`Postgres`), мы предполагаем, что данные будут небольшими
(не более нескольких кБ), поэтому мы храним их напрмую в колонке БД, в случае если предполагается,
что размер данных большой, необходимо использовать `STREAM`;
* для обеспечения возможности добавления извлечения элементов из стэка без необходимости индексировать
все элементы они будут храниться в виде односвязного списка т.е. у каждого `item` будет колонка
`previuos_item_id` (у верхнего будет NULL), поэтому при извлечении/добавлении нового элемента в стэк
потребуется отредактировать только 1 элемент из таблицы `items`.

## 3. Описание `API` для управления стэками

* `GET /api/lifo` - возвращает коллекцию метаинформации (без `items`) стэков (без элементов)
* `GET /api/lifo/{id}` - возвращает метаинформацию по стэку по идентификатору `{id}`
* `GET /api/lifo/{id}/items` - возвращает стэк со всеми его элементами
* `POST /api/lifo` - создает новый пустой стэк;
* `PUT /api/lifo/{id}` - редактирует метаинформацию стэка;
* `DELETE /api/lifo/{id}` - удаляет стэк со всеми его элементами;
* `POST /api/lifo/flush` - выполняет очистку стэка (удаляет его элементы);
* `POST /api/lifo/{id}/push` - добавляет элемент в стэк с идентификатором `{id}`;
* `POST /api/lifo/{id}/pop` - извлекает элемент из стэка с идентификатором `{id}`.

## 4. Запуск в docker-container

1. Запуск с предварительной сборкой (пересборкой образов)

```ps1
docker-compose up --build
```

2. Удаление ранее собранных образов

```ps1
docker-compose down
```

Доступ к Web API можно осуществить по flhtce: `localhost:8765`