Техническая документация: Эндпоинт /api/passport
1. Введение и назначение
Эндпоинт /api/passport
предоставляет программный интерфейс для проверки действительности паспорта гражданина Российской Федерации. Сервис предназначен для интеграции в различные информационные системы, где требуется валидация паспортных данных, например, при проведении KYC (Know Your Customer) процедур, оформлении финансовых продуктов или регистрации пользователей.
Метод выполняет запрос к базе данных недействительных паспортов (базе ФМС/ГУВМ МВД) и возвращает структурированную информацию о статусе документа, его выдаче и наличии в списке недействительных.
Базовый URL: https://api.example.com/api/passport
HTTP Метод: GET
2. Подробное описание параметров запроса
Все параметры передаются в строке запроса (query string).
Параметр | Тип | Обязательный | Описание | Пример значения |
---|---|---|---|---|
api_key |
String | Да | Уникальный ключ доступа (API Key), выданный поставщиком сервиса. Используется для аутентификации и авторизации запроса. | a1b2c3d4-e5f6-7890-abcd-ef1234567890 |
ser |
String | Да | Серия проверяемого паспорта. Состоит из 4 цифр. | 4501 |
nom |
String | Да | Номер проверяемого паспорта. Состоит из 6 цифр. | 123456 |
3. Примеры использования
Пример успешного HTTP-запроса
GET /api/passport?api_key=your_actual_api_key&ser=4501&nom=123456 HTTP/1.1
Host: api.example.com
Примеры кода на различных языках программирования
Python (используя библиотеку requests
)
import requests
url = "https://api.example.com/api/passport"
params = {
"api_key": "your_actual_api_key",
"ser": "4501",
"nom": "123456"
}
response = requests.get(url, params=params)
data = response.json()
if data['success']:
passport_status = data['passport_check'][1]['passport']
if passport_status == '0':
print("Паспорт недействителен.")
elif passport_status == '2':
print("Паспорт с такой серией не выдавался.")
else:
print("Статус неизвестен.")
else:
print("Произошла ошибка на уровне API.")
JavaScript (Fetch API)
const apiKey = 'your_actual_api_key';
const ser = '4501';
const nom = '123456';
const url = `https://api.example.com/api/passport?api_key=${apiKey}&ser=${ser}&nom=${nom}`;
fetch(url)
.then(response => response.json())
.then(data => {
if (data.success) {
const info = data.passport_check.find(item => item.info).info;
console.log(info);
} else {
console.error('API request failed');
}
})
.catch(error => console.error('Error:', error));
PHP
<?php
$api_key = 'your_actual_api_key';
$ser = '4501';
$nom = '123456';
$url = "https://api.example.com/api/passport?api_key=$api_key&ser=$ser&nom=$nom";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
if ($data['success']) {
$dop = $data['passport_check'][2]['dop'];
foreach ($dop as $item) {
echo key($item) . ': ' . current($item) . "\n";
}
} else {
echo "Ошибка запроса.";
}
?>
Java (используя HttpURLConnection
)
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class PassportCheck {
public static void main(String[] args) {
try {
String apiKey = "your_actual_api_key";
String ser = "4501";
String nom = "123456";
String urlStr = "https://api.example.com/api/passport?api_key=" + apiKey + "&ser=" + ser + "&nom=" + nom;
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuffer content = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
in.close();
conn.disconnect();
// Здесь следует использовать библиотеку JSON (например, Gson, Jackson) для парсинга content.toString()
System.out.println(content.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Go
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"log"
)
type Response struct {
PassportCheck []map[string]interface{} `json:"passport_check"`
Success bool `json:"success"`
}
func main() {
apiKey := "your_actual_api_key"
ser := "4501"
nom := "123456"
url := fmt.Sprintf("https://api.example.com/api/passport?api_key=%s&ser=%s&nom=%s", apiKey, ser, nom)
resp, err := http.Get(url)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
var data Response
err = json.Unmarshal(body, &data)
if err != nil {
log.Fatal(err)
}
if data.Success {
fmt.Println("Запрос выполнен успешно.")
// Дальнейшая обработка data.PassportCheck
}
}
1C (на примере встроенного языка 1С)
// Внимание: Пример упрощен. Реализация может отличаться в зависимости от версии платформы 1С.
Запрос = Новый HTTPЗапрос();
URL = "https://api.example.com/api/passport?api_key=your_actual_api_key&ser=4501&nom=123456";
Соединение = Новый HTTPСоединение("api.example.com", 443, "", "", Новый ЗащищенноеСоединениеOpenSSL()); // Используем порт 443 для HTTPS
Ответ = Соединение.Получить(URL);
Если Ответ.КодСостояния = 200 Тогда
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.ПотокВвода = Новый ПотокВводаИзСтроки(Ответ.ПолучитьТелоКакСтроку());
Результат = ПрочитатьJSON(ЧтениеJSON);
// Далее разбираем структуру Результат
Иначе
Сообщить("Ошибка HTTP: " + Ответ.КодСостояния);
КонецЕсли;
4. Обработка ошибок и интерпретация ответов
Ответ всегда возвращается с HTTP статусом 200 OK
, если запрос корректно достиг сервера. Критичность ошибок и статус операции определяются по полю success
и структуре объекта passport_check
.
Ключевые поля ответа:
success: true
- Индикатор того, что запрос был корректно обработан API. Важно:true
не означает, что паспорт действителен, а лишь то, что сервис дал ответ на запрос.passport_check[1].passport
- Основной код статуса паспорта."0"
- Паспорт найден в базе недействительных паспортов."1"
- Паспорт не найден в базе недействительных паспортов."2"
- Паспорт с указанной серией не выдавался на территории РФ."3"
- Ошибка валидации (неправильно введены данные).
passport_check[3].info
- Текстовое описание результата проверки, предназначенное для разработчика или логирования.passport_check[2].dop
- Массив с дополнительной информацией о выдаче паспорта (место и дата), актуальной только для статуса"0"
.
Логика обработки на стороне клиента:
- Проверить
response.success == true
. - Извлечь код статуса
passport_status = response.passport_check[1].passport
. - В зависимости от кода принять решение:
"0"
- Паспорт недействителен. Не пропускать пользователя."1"
- Паспорт не найден в БД недействительных паспортов. Пропустить пользователя."2"
- Серия паспорта не существует. Не пропускать пользователя."3"
- Ошибка ввода. Запросить данные у пользователя повторно.- Любое другое значение - Логировать и обработать как неизвестную ошибку.
5. Best Practices (Рекомендации по использованию)
- Безопасность API ключа: Никогда не храните API ключ в клиентском коде (frontend, мобильные приложения). Все запросы должны выполняться с вашего серверного backend.
- Валидация на стороне клиента: Перед отправкой запроса обязательно проверяйте формат серии (4 цифры) и номера (6 цифр) на стороне клиента, чтобы избежать лишних вызовов API и ошибок типа
"3"
. - Кэширование: Рассмотрите возможность кэширования результатов проверки на короткое время (несколько часов) на своей стороне для повторяющихся запросов на одни и те же паспортные данные, чтобы снизить нагрузку и затраты.
- Асинхронная обработка: Выполняйте запросы асинхронно, чтобы не блокировать основной поток вашего приложения, особенно в веб-интерфейсах.
- Обработка исключений: Всегда обрабатывайте возможные сетевые ошибки, таймауты и исключения, связанные с парсингом JSON.
- Логирование: Ведите логи всех запросов и ответов (замаскировав при этом
api_key
в логах) для отладки и анализа проблем.
6. Ограничения и лимиты
- Частота запросов (Rate Limiting): Доступ к API обычно ограничен по количеству запросов в секунду/минуту/сутки. Точные лимиты указываются в договоре с поставщиком сервиса. Превышение лимита приводит к ответу с HTTP кодом
429 Too Many Requests
. - Точность данных: Сервис оперирует данными из официальной базы, но возможны задержки в обновлении информации. Поставщик услуги не гарантирует 100% точность и актуальность данных на момент запроса.
- Тарификация: Обращение к API, как правило, является платным. Стоимость одного запроса или пакета запросов уточняется у поставщика услуги.