API сервис для запроса в NASA API информации об астероидах, сближающихся с Землей.
С помощью данного API пользователь может получать выборку всех либо самых крупных астероидов за конкретную дату или промежуток дат, отсортированную в рамках каждой даты по размеру астероида.
Предоставляемая информация:
date
- дата максимального сближенияneo_reference_id
- идентификатор астероидаname
- наименование астероидаabsolute_magnitude_h
- абсолютная величина астероидаis_potentially_hazardous_asteroid
- является ли астероид потенциально опасным
Tool | Version |
---|---|
python | "^3.11" |
django | "^4.2.4" |
djangorestframework | "^3.14.0" |
python-dotenv | "^1.0.0" |
requests | "^2.31.0" |
djangorestframework-simplejwt | "^5.2.2" |
psycopg2-binary | "^2.9.7" |
Перед установкой убедитесь, что у вас установлены Python, Poetry и PostgreSQL.
# Проверить версию python
python3 -V
# Проверить версию poetry
poetry -V
# Установить poetry
curl -sSL https://install.python-poetry.org | python3 -
-
Склонируйте данный репозиторий и перейдите в папку проекта:
git clone https://github.com/ratushnyyvm/crpt-test-assignment.git && cd crpt-test-assignment
-
Установите все необходимые зависимости:
make install
-
Переименуйте файл
.env.example
в.env
и заполните указанные поля. Либо создайте новый файл.env
со следующими данными:SECRET_KEY= DEBUG= # 0 -> False, 1 -> True POSTGRES_NAME= POSTGRES_USER= POSTGRES_PASSWORD= POSTGRES_HOST= POSTGRES_PORT=
-
Выполните миграции для создания необходимых таблиц в базе данных:
make migrate
-
Запустите сервер разработчика:
make start
Сервер разработчика будет доступен по адресу http://127.0.0.1:8000.
Для работы с сервисом необходимо быть зарегистированным пользователем. Регистрация пользователей осуществляется через панель администратора. Для создания суперпользователя необходимо выполнить:
make superuser
Авторизация пользователей осуществляется посредством JWT токена. Получение токена доступно по адресу POST /api/token/
. В теле запроса необходимо передать данные зарегистрированного пользователя:
{
"username": "username",
"password": "password"
}
Все следующие роуты будут ожидать в заголовках поле Authorization
c актуальным токеном в формате Bearer jwt-token
.
Получение данных реализовано через задачи. Сначала пользователь отправляет запрос с необходимыми параметрами, а в ответ получает id задачи, в рамках которой этот запрос будет реализован. Затем по id задачи пользователь получает результат выполнения этой задачи.
Получение id задачи доступно по адресу GET /neo_id/?start_date=2023-08-12&end_date=2023-08-13&count=2
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
start_date | YYYY-MM-DD | Да | Дата начала выборки. |
end_date | YYYY-MM-DD | Нет | Дата окончания выборки. По умолчанию равна дате начала выборки. |
count | integer | Нет | Ограничение вывода. По умолчанию выводятся все данные. |
Если пользователь ввел значение другого формата, не указал обязательный параметр, указал дату окончания выборки меньше даты начала или установил ограничение меньше единицы, то будет возвращен словарь с сообщениями об ошибках для каждого поля.
Пример ответа на валидный запрос GET /neo_id/?start_date=2023-08-12&end_date=2023-08-13&count=2
:
{
"task_id": 22
}
Пример ответа на невалидный запрос GET /neo_id/?start_date=12-08-2023&end_date=2023-13-08&count=-5
:
{
"start_date": [
"Date has wrong format. Use one of these formats instead: YYYY-MM-DD."
],
"end_date": [
"Date has wrong format. Use one of these formats instead: YYYY-MM-DD."
],
"count": [
"Ensure this value is greater than or equal to 1."
]
}
Получение результата задачи доступно по адресу GET /neo_result/?task_id=22
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
task_id | integer | Да | Уникальный идентификатор задачи. |
Если пользователь ввел значение другого формата, не указал обязательный аргумент, установил значение меньше единицы или несуществующей задачи, то будет возвращен словарь с сообщением об ошибке.
Пример ответа на валидный запрос GET /api/v1/neo_result/?task_id=22
:
{
"2023-08-12 3703438": {
"name": "(2015 AQ43)",
"absolute_magnitude_h": 28.0,
"is_potentially_hazardous_asteroid": false
},
"2023-08-12 54051257": {
"name": "(2020 QF2)",
"absolute_magnitude_h": 27.9,
"is_potentially_hazardous_asteroid": false
},
"2023-08-13 54053939": {
"name": "(2020 RD4)",
"absolute_magnitude_h": 29.7,
"is_potentially_hazardous_asteroid": false
},
"2023-08-13 54051379": {
"name": "(2020 QE5)",
"absolute_magnitude_h": 25.5,
"is_potentially_hazardous_asteroid": false
}
}
Пример ответа на невалидный запрос GET /api/v1/neo_result/?task_id=22h
:
{
"task_id": [
"A valid integer is required."
]
}
Для удобства отправки запросов реализованы две веб формы:
GET id/
- запрос на обработку задачиGET result/
- получение результа задачи