Перейти к содержанию

HTTP API

Методы API

POST /jobs/features

Отправляет задание на расчёт факторов.

Пример запроса:

POST /jobs/features HTTP/1.1
Authorization: test5ab853b308th539test
Content-Type: application/json

{
    "points": [
        {
            "id": 1,
            "geopos": {
                "type": "Point",
                "coordinates": [30.33, 59.86]
            }
        }
    ],
    "features": {
        "apartments_r500": {
            "type": "circle",
            "dataset": "ru-pub-households/apartments",
            "limit": 500,
            "field": "price",
            "agg": "mean"
        }
    }
}

Пример ответа:

HTTP/1.1 200 OK
Authorization: test5ab853b308th539test
Content-Type: application/json

{
    "job_id": "6665eb015d8001bf2e92",
    "total": 1
}

Заголовки запроса

Authorization
Авторизационный токен.

GET /jobs/{job_id}

Возвращает статус задания.

Пример запроса:

GET /jobs/6665eb015d8001bf2e92 HTTP/1.1
Authorization: test5ab853b308th539test

Пример ответа:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "job_id": "6665eb015d8001bf2e92",
    "total": 1,
    "progress": 1,
    "failed": 0,
    "status": "completed"
}

Параметры пути

job_id
Идентификатор отправленного задания.

Заголовки запроса

Authorization
Авторизационный токен.

GET /jobs/{job_id}/result

Возвращает результат завершённого задания.

Пример запроса:

GET /jobs/6665eb015d8001bf2e92/result HTTP/1.1
Authorization: test5ab853b308th539test

Пример ответа:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "result": [
        {
            "id": 1,
            "apartments_r500": 252500.2
        }
    ],
    "total": 1,
    "progress": 1,
    "failed": 0,
    "status": "completed"
}

Параметры пути

job_id
Идентификатор отправленного задания.

Заголовки запроса

Authorization
Авторизационный токен.

DELETE /jobs/{job_id}

Прерывает выполняющееся задание.

Прерывание происходит не мгновенно: уже начатые точки завершаются, остальные не рассчитываются. После завершения задания будет доступен частичный результат, с баланса спишутся только успешно рассчитанные факторы.

Пример запроса:

DELETE /jobs/6665eb015d8001bf2e92 HTTP/1.1
Authorization: test5ab853b308th539test

Пример ответа:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "message": "Accepted"
}

Параметры пути

job_id
Идентификатор отправленного задания.

Заголовки запроса

Authorization
Авторизационный токен.

GET /balance

Возвращает текущий баланс ресурсов пользователя.

Пример запроса:

GET /balance HTTP/1.1
Authorization: test5ab853b308th539test

Пример ответа:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "balance": {
        "faas_features": 100
    }
}

Заголовки запроса

Authorization
Авторизационный токен.

Пример

Пример с использованием Python-библиотеки requests:

import requests

FAAS_URL = 'https://faas.example.com'
FAAS_TOKEN = 'test5ab853b308th539test'

config = {
    'points': [
        {
            'id': 1,
            'geopos': {
                'type': 'Point',
                'coordinates': [30.33, 59.86]
            }
        },
    ],
    'features': {
        'apartments_r500': {
            'type': 'circle',
            'dataset': 'ru-pub-households/apartments',
            'limit': 500,
            'field': 'price',
            'agg': 'mean',
        },
    },
}

# Отправляем задание.
response = requests.post(
    f'{FAAS_URL}/jobs/features',
    headers={'Authorization': FAAS_TOKEN},
    json=config,
)
response.raise_for_status()
job_id = response.json()['job_id']

# Проверяем ход выполнения.
response = requests.get(
    f'{FAAS_URL}/jobs/{job_id}',
    headers={'Authorization': FAAS_TOKEN},
)
response.raise_for_status()
data = response.json()
print(
    f"{data['progress'] / data['total'] * 100}% done",
    f"{data['progress']} points done",
    f"{data['total']} total points",
    sep='\n'
)

# Получаем результат завершённого задания.
response = requests.get(
    f'{FAAS_URL}/jobs/{job_id}/result',
    headers={'Authorization': FAAS_TOKEN},
)
response.raise_for_status()
result = response.json()['result']

# Преобразуем результат в DataFrame.
import pandas as pd

df = pd.DataFrame(result)