# Holiday api Simple api used for tracking holidays To check out application, open [https://holiday.bbr-dev.info](https://holiday.bbr-dev.info) ## Endpoints Fetching is done via `GET /api/v1/holidays` endpoint That endpoint accepts a list of required and optional parameters ### Required parameters `country` - determines for which country holidays are fetched, uses ISO 3166-1 Alpha-2 codes [more info here](https://en.wikipedia.org/wiki/ISO_3166-1) - eg. `country=US` ### Optional parameters `year` - returns only holidays for given year - eg. `year=2023` - only used if no more important parameters are defined `date` - returns only holidays for given date - date must be formatted in ISO 8601 format [more info here](https://www.iso.org/iso-8601-date-and-time-format.html) - eg. `date=2021-12-25` - if defined year and rangeStart|rangeEnd parameters are ignored `range_start|range_end` - returns holidays in given range with both ends being inclusive - if either limit isn't defined it is assumed to be up to or all from given limit (if rangeStart isn't defined all holidays before rangeEnd are returned and vice-verse) - dates must be formatted in ISO 8601 format [more info here](https://www.iso.org/iso-8601-date-and-time-format.html) - eg. `range_start=2021-12-25&range_end=2023-01-23`, `range_start=2023-01-20` - if defined year parameter is ignored `state_holiday` - if set true only holidays that are tagged as state holidays are returned, similar for if set false, if not set all holidays are returned - eg. `state_holiday=true`, `state_holiday=false` `religious_holiday` - if set true only holidays that are tagged as religious holidays are returned, similar for if set false, if not set all holidays are returned - eg. `religious_holiday=true`, `religious_holiday=false` #### Paging `page_size` - returns at most pageSize number of holidays - eg. `page_size=20` - only applied if page is defined as well, by default set to 20 `page` - returns nth page of holidays, paging starts at 0 - eg. `page=0` ## Response By default, responses are returned as a json array ``` { holidays: [{ id: string; date: string(ISO 8601); name: string; description: string; isStateHoliday: boolean; isReligiousHoliday: boolean; },...] } ``` e.g. ``` { "holidays": [{ "id": "74a2a769-abf2-45d4-bdc4-442bbcc89138", "date": "2023-12-25", "name": "Christmas", "description": "TBD", "isStateHoliday": true, "isReligiousHoliday": true }] } ``` But can be returned as XML or CSV by setting appropriate `Accept` header (application/xml, text/xml or text/csv) XML Response ``` Christmas TBD ``` CSV Response ``` id,date,name,description,is_state_holiday,is_religious_holiday 74a2a769-abf2-45d4-bdc4-442bbcc89138,2023-12-25,Christmas,TBD,true,true ``` ### Development To start server few environment variables need to be set up. This can be done by creating `.env` file with following content ```bash PSQL_HOST=localhost PSQL_PORT=5432 PSQL_USER=holiday PSQL_PASSWORD=holidayPassword PSQL_DB=holiday PROFILE=dev,basic-auth AUTH_KEY=holiday:holidayPassword ```