make start-docker
make run-gateway
make run-service
make stop-docker
Репозиторий содержит два микросервиса, общающихся между собой через gRPC.
Сервис api-gateway является шлюзом, содержит в себе http-сервер для общения с клиентом. Сервис получает данные из микросервиса custshopsvc посредством общения через gRPC.
Сервис custshopsvc хранит и обрабатывает данные о покупателях и магазинах. Для хранения используется БД Postgres, возможно хранение данных в runtime. Сервис содержит в себе gRPC-сервер, который содержит эндпоинты для операций с данными. В качестве входного значения сервис получает оба типа записи.
Стандартный адрес работы http-сервера localhost:8282
// POST /api/v1/customer/
// PATCH /api/v1/customer/{id}
// DELETE /api/v1/customer/{id}
// GET /api/v1/customer/?surname={surname}
// GET /api/v1/customer?surname={surname}&field={field}
// GET /api/v1/customer/{id}?field={field}
// POST /api/v1/shop/
// PATCH /api/v1/shop/{id}
// DELETE /api/v1/shop/{id}
// GET /api/v1/shop/?name={name}
// GET /api/v1/shop?name={name}&field={field}
// GET /api/v1/shop/{id}?field={field}
POST /api/v1/customer/
Содержит raw body с json покупателя.
{
"surname":"Familiya",
"firstname":"Imya",
"patronym":"Otchesvovich",
"age":"55"
}
Ответ содержит в себе json с созданным id. Возвращает статус 201:
HTTP/1.1 201 Created
{"id": "1cb1b52a-fdd0-4e22-8f88-80e16012ec95"}
GET /api/v1/customer/{id}?field={field}
Получение по id покупателя.
Опционально можно получить только одно поле из записи, указав название поля (название поля из json) query параметром field.
Возвращает статус 200 при успешно найденной записи и json с полученными данными.
HTTP/1.1 200 OK
Date: Fri, 13 Jan 2023 20:45:15 GMT
Status: 200 OK
Content-Type: application/json
Content-Length: 117
{"surname":"Familiya","firstname":"Imya","patronym":"Otovich","age":"55","date_created":"2023-01-13T23:44:42.11825Z"}
Возвращает статус 404 если запись не найдена и json с текстом ошибки.
{"error": "Not Found: Record not found"}
GET /api/v1/customer?surname={surname}&field={field}
Поиск покупателя по параметру surname.
Опционально можно получить только одно поле из записи, указав название поля (название поля из json) query параметром field.
Возвращает статус 200 при успешно найденной записи и json с полученными данными.
HTTP/1.1 200 OK
Date: Fri, 13 Jan 2023 20:45:15 GMT
Status: 200 OK
Content-Type: application/json
Content-Length: 46
{"date_created": "2023-01-13T23:21:09.131116Z"}
Возвращает статус 404 если запись не найдена и json с текстом ошибки.
{"error": "Not Found: Record not found"}
PATCH /api/v1/customer/{id}
Содержит raw body с json полями, которые необходимо изменить
{
"surname":"Familiyev",
"firstname":"Test"
}
Ответ возвращает статус 200 при успешном изменении. :
HTTP/1.1 200 OK
Date: Fri, 13 Jan 2023 20:23:42 GMT
Возвращает статус 404 если запись не найдена и json с текстом ошибки.
{"error": "Not Found: Record not found"}
DELETE /api/v1/customer/{id}
Удаление по id записи с покупателем.
Возвращает статус 204 при успешно удаленной записи.
HTTP/1.1 204 No Content
Date: Fri, 13 Jan 2023 20:45:15 GMT
Возвращает статус 404 если запись не найдена и json с текстом ошибки.
{"error": "Not Found: Record not found"}
POST /api/v1/shop/
Содержит raw body с json магазина.
{
"name":"Final test",
"address":"Add ress",
"work_status":true,
"owner":"Ownerov Ovner"
}
Ответ содержит в себе json с созданным id. Возвращает статус 201:
HTTP/1.1 201 Created
{"id": "f5b6a4ad-85b3-4823-8d33-47249645577b"}
GET /api/v1/shop/{id}?field={field}
Получение по id записи о магазине.
Опционально можно получить только одно поле из записи, указав название поля (название поля из json) query параметром field.
Возвращает статус 200 при успешно найденной записи и json с полученными данными.
HTTP/1.1 200 OK
Date: Fri, 13 Jan 2023 20:45:15 GMT
Status: 200 OK
Content-Type: application/json
Content-Length: 117
{"name":"Final test","address":"Add ress","work_status":true,"owner":"Ownerov Ovner"}
Возвращает статус 404 если запись не найдена и json с текстом ошибки.
{"error": "Not Found: Record not found"}
GET /api/v1/shop?name={name}&field={field}
Поиск магазина по параметру name.
Опционально можно получить только одно поле из записи, указав название поля (название поля из json) query параметром field.
Возвращает статус 200 при успешно найденной записи и json с полученными данными.
HTTP/1.1 200 OK
Date: Fri, 13 Jan 2023 20:45:15 GMT
Status: 200 OK
Content-Type: application/json
Content-Length: 46
{"address":"Add ress 33"}
Возвращает статус 404 если запись не найдена и json с текстом ошибки.
{"error": "Not Found: Record not found"}
PATCH /api/v1/shop/{id}
Содержит raw body с json полями, которые необходимо изменить
{
"name":"Final test Update",
"address":"Add ress 33"
}
Ответ возвращает статус 200 при успешном изменении. :
HTTP/1.1 200 OK
Date: Fri, 13 Jan 2023 20:23:42 GMT
Возвращает статус 404 если запись не найдена и json с текстом ошибки.
{"error": "Not Found: Record not found"}
DELETE /api/v1/shop/{id}
Удаление по id записи с магазином.
Возвращает статус 204 при успешно удаленной записи.
HTTP/1.1 204 No Content
Date: Fri, 13 Jan 2023 20:45:15 GMT
Возвращает статус 404 если запись не найдена и json с текстом ошибки.
{"error": "Not Found: Record not found"}
Сделать HTTP сервер (без применения фреймворков), умеющий создавать, изменять и удалять записи двух типов:
-
Информация о покупателе
◦ Фамилия
◦ Имя
◦ Отчество
◦ Возраст (необязательное поле)
◦ Дата регистрации
-
Информацию о магазине
◦ Название
◦ Адрес
◦ Работающий или нет
◦ Владелец (необязательное поле)
Непосредственную работу с записями необходимо осуществлять с использованием одной функции, умеющей принимать в качестве входного значения оба типа записи.
Хранить и накапливать информацию можно по выбору: в рантайм, СУБД, файлах.
Входными и выходными параметрами в HTTP запросах являются данные в формате JSON.
На выходе сервис должен уметь возвращать всю запись , либо одно поле из записи в зависимости от запроса пользователя , осуществлять поиск по Фамилии и Названию для соответствующих записей.
Можно немного усложнить ее, разбив на два микросервиса:
Сделать два микросервиса работающих через GRPC:
- HTTP сервер для общения с пользователем
- Сервис хранения и обработки данных, в который ходит HTTP сервер за данными. Остальные вводные те же.