Thanks to visit codestin.com
Credit goes to github.com

Skip to content

chooh/myproj

Repository files navigation

OpenWeather Proxy Server

Требуется реализовать серверное приложение, реализующее проксирование с кешированием для сервиса погоды. Сервер должен предоставлять HTTP API с одним методом для получения погоды в заданной локации и заданный момент (текущий или прошедший). Для доступа к данным о погоде предлагается использовать OpenWeatherMap API (достаточно использовать информацию о погоде в текущий момент времени). При запросе к серверу, он должен использовать кеш, если там присутствуют данные (возможна загрузка данных с погрешностью по времени/локацией). Кеш должен наполняться автоматически в фоне для списка локаций с заданным интервалом.

На выходе должен быть проект Stack (с одним пакетом). В пакете должна быть библиотека и один исполняемый модуль (кеш-сервер).

Ключ API для OpenWeatherMap должен извлекаться из переменной окружения. API root может быть указан в аргументах командной строки или в переменной окружения (по умолчанию стоит использовать API root сервиса). 

Сервер для запуска должен принимать следующие параметры (либо из аргументов командной строки, либо из переменных окружения, либо из конфигурационного файла):

  1. Номер порта, на котором запуститься.
  2. Список локаций, для которых необходимо автоматическое кеширование.
  3. (опционально) период автоматических обновлений
  4. (опционально) допустимые погрешности для локаций и/или времени.

Также опционально сервер может поддерживать Swagger/OpenAPI спецификацию (servant-swagger или servant-openapi3) и раздавать Swagger UI (servant-swagger-ui).

  • Для описания API и реализации сервера используй библиотеку servant.
  • Для работы с форматом JSON используй библиотеку aeson.
  • Для работы с аргументами командной строки можешь использовать библиотеку optparse-applicative.
  • Для конфигурационного файла можешь использовать YAML или Dhall.
  • Для запросов к OpenWeatherMap API можешь использовать servant-client или поискать другие решения.

Stack

stack upgrade # до последней версии
stack new myproj # создаем проект

Потом идем в myproj/package.yaml, добавляем сервант зависимостью в библиотеку нашего пакета так

library:
  source-dirs: src
  dependencies:
  - servant

и потом

cd myproj
stack build

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published