VKCOM / vk-api-schema

JSON Schema of VK API
MIT License
206 stars 63 forks source link

`base_error` плохо задокументирован #196

Closed Frago9876543210 closed 2 years ago

Frago9876543210 commented 3 years ago

На https://vk.com/dev совершенно отсутствует документация по работе с ошибками. В json схеме все поля объекта base_error необязательны. То же самое наблюдается с base_request_param. Почему столько полей не помечена, как required в ответе сервера?

При работе с ошибками возникает недоразумение. Разработчик получил ошибку от вашего сервиса, а ему приходит примерно такой объект:

#[derive(Deserialize, Debug)]
struct RequestParam {
    key: Option<String>,
    value: Option<String>,
}

#[derive(Deserialize, Debug)]
enum VkResponse<T> {
    #[serde(rename(deserialize = "response"))]
    Response(T),
    #[serde(rename(deserialize = "error"))]
    Error {
        error_code: Option<i32>,
        error_subcode: Option<i32>,
        error_msg: Option<String>,
        error_text: Option<String>,
        request_params: Option<Vec<RequestParam>>,
    },
}

На всякий случай продублирую на вашем хипстерском typescript

export interface BaseError {
    /**
     * Error code
     */
    error_code?: number;
    /**
     * Error subcode
     */
    error_subcode?: number;
    /**
     * Error message
     */
    error_msg?: string;
    /**
     * Localized error message
     */
    error_text?: string;
    [key: string]: any;
    request_params?: BaseRequestParam[];
}

А теперь у нормального разработчика возникает много вопросов от вашего API и json схемы. Допустим, что ваш сервис не отправил мне вообще ничего в объекте BaseError. Как в таком случае показывать ошибку юзеру или программисту, который пользуется моей библиотекой?

ablearthy commented 2 years ago

Теперь это исправили! Было Стало

Теперь можно по коду ошибки выводить его description (см. errors.json)