Создать универсальный API-сервис, который предоставляет данные о почтовых индексах разных стран в удобном JSON-формате. Сервис должен:
- Поддерживать множество стран (Бразилия, Австрия, Беларусь, Финляндия, Франция, Канада и др.)
- Отдавать данные в структурированном виде (страна, индекс, населенный пункт, регион, координаты, точность)
- Иметь систему регистрации пользователей и выдачи персональных токенов
- Предоставлять демо-доступ для ознакомления (токен на 3 дня)
- Быть простым для интеграции в любые приложения (достаточно HTTP-запроса)
- Содержать документацию по полям данных
Создал модульный REST API на Symfony с поддержкой разных стран и форматов вывода:
/src/
├── Controller/
│ ├── Api/
│ │ ├── PostalCodeController.php # Основной API для индексов
│ │ └── AuthController.php # Регистрация и токены
│ └── Web/
│ └── HomeController.php # Главная страница со списком стран
├── Entity/
│ ├── User.php # Пользователи для API
│ ├── ApiToken.php # Токены доступа
│ └── PostalCode.php # Данные индексов
├── Repository/
│ ├── PostalCodeRepository.php
│ └── ApiTokenRepository.php
├── Service/
│ ├── PostalCodeService.php
│ ├── TokenService.php
│ └── DataImporter/
│ └── GeoNamesImporter.php # Импорт данных из GeoNames
└── DataFixtures/
└── PostalCodeFixtures.php # Загрузка данных по странам
API возвращает данные в формате JSON с полями, описанными в документации:
country_code - ISO 3166-2 код страны
postal_code - Почтовый индекс
place_name - Название населенного пункта
latitude - Широта (WGS84)
longitude - Долгота (WGS84)
accuracy - Точность координат (1=оценка, 4=геоним, 6=центроид)
admin_name1 - Штат/регион/область
admin_name2 - Муниципалитет/район
На главной странице реализован удобный интерфейс со списком всех доступных стран:
Доступные страны (из скриншота):
- Аландские острова
- Андорра
- Австрия
- Беларусь
- Бразилия
- Чили
- Коста-Рика
- Чехия
- Финляндия
- Французская Полинезия
- Гваделупа
- Гернси
- Исландия
- Алжир
- Аргентина
- Австралия
- Бангладеш
- Бермуды
- Канада
- Колумбия
- Кипр
- Доминиканская Республика
- Фарерские острова
- Франция
- Французская Гвиана
- Гренландия
- Гватемала
- Венгрия
- Ирландия
и д.р.
Технические результаты
✅ Разработан полноценный REST API на Symfony для работы с почтовыми индексами
✅ Поддержка 30+ стран с возможностью легкого добавления новых
✅ Система регистрации пользователей и выдачи персональных токенов
✅ Демо-доступ с временным токеном (3 дня) для тестирования
✅ Документированный API с описанием всех полей
✅ Три типа запросов: все индексы страны, поиск по индексу, поиск по координатам
✅ Импорт данных из официальных источников (GeoNames)
Для пользователей
✅ Простая интеграция через HTTP-запросы
✅ Понятная документация с примерами на PHP
✅ Бесплатный демо-доступ для ознакомления
✅ Регистрация для получения постоянного токена