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
- Host: GitHub
- URL: https://github.com/evillord666/weblifo
- Owner: EvilLord666
- License: apache-2.0
- Created: 2022-12-12T09:23:10.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2023-09-18T12:08:52.000Z (over 2 years ago)
- Last Synced: 2025-03-28T02:51:39.736Z (about 1 year ago)
- Topics: docker-compose, docker-golang, docker-golangweb, go-template, go-tutorial, go-web-application, rest-api, rezonit
- Language: Go
- Homepage:
- Size: 92.8 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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`