Задание
Необходимо разработать HTTP API, с помощью которого можно:
- добавлять/удалять в хранилище информацию о городах;
- запрашивать информацию о городах из хранилища;
- по заданным широте и долготе точки выдавать 2 ближайших к ней города из присутствующих в хранилище.
При запросе к API на добавление нового города клиент указывает только название города, а в хранилище добавляются также координаты города. Данные о координатах можно получать из любого внешнего API.
Реализация хранилища произвольная.
Как запустить
docker-compose up --build
Как удалить контейнеры с томами
docker-compose down -v
Команды
добавить город curl -X POST -H "Content-Type: application/json" -d '{"name": "New york"}' http://127.0.0.1:5000/cities
удалить город curl -X DELETE -H "Content-Type: application/json" -d '{"name": "Samara"}' http://127.0.0.1:5000/cities
просмотреть инфу про город curl -X GET -H "Content-Type: application/json" -d '{"name": "Iksha"}' http://127.0.0.1:5000/cities
найти расстояние до этой точки от ближайшего города curl -X GET -H "Content-Type: application/json" -d '{"longitude": "86.1735436", "latitude":"6.1735436"}' http://127.0.0.1:5000/nearest_cities
Принцип работы Есть два контейнера, с базой данных Postgres и с серверной частью проекта. В бд одна таблица
| id | название города | координаты в формате WGS 84 |
|---|---|---|
Формат координат выбран такой, так как это первое попавшийся мне пример храния координат в одном поле. У этого контейнера порт 5432 соединен с 5433, так как порт 5432 может быть занят бд Postgres на хосте.
Во втором контейнере приложение на Python3. Основной класс -- City, для обработки данных из бд. Для обработки запросов используется flask. Приложение находится на 5000 порту.
Примечание Клонировать репозиторий стоит в папку с названием cities_app, чтобы контейнеры могли подключиться друг к другу. Название контейнера в docker-compose захардкожено и состоит из названия папки)