TGViewer
Бодрый кодер Бодрый кодер @bodrcoder · 576 subscribers
Post #578 548
Сегодня понедельник — самое время выдать свой вариант по странам, регионам, городам.

Сначала, конечно, тянет сделать что-то такое:

`/countries/{id}/regions/{id}/cities/{id}`

Красиво же! Иерархично! Прямо видно структуру данных!
Но это ощущение проходит примерно через пять минут — как только начинаешь думать о реальном использовании.

Во-первых, все эти сущности живут сами по себе: у страны есть ID, у региона есть ID, у города есть ID.
Зачем же закапывать их друг в друга, если каждый можно получить напрямую?

Во-вторых, фильтрация потом превращается в цирк:
если тебе нужны «все города страны с населением больше 100к и без метро», то в лесенке из URL это выглядит максимально странно.

Поэтому финальный, рабочий и жизненный вариант у меня такой:

1. Каноничные ресурсы — плоские


GET /countries
GET /countries/{country_id}

GET /regions
GET /regions/{region_id}

GET /cities
GET /cities/{city_id}


Каждая сущность доступна сама по себе. Это убирает лишние проверки, упрощает клиентам жизнь и делает API устойчивым.

2. Отношения — через коллекции

GET /countries/{country_id}/regions
GET /regions/{region_id}/cities
GET /countries/{country_id}/cities


Каждая сущность доступна сама по себе. Это убирает лишние проверки, упрощает клиентам
Это удобно для навигации — но не обязательно для CRUD.

3. Фильтры — через параметры

```
GET /cities?country_id=1&population_gt=100000
GET /cities?region_id=42&has_metro=true

```

Это гибче, чище и не ломается от каждого нового поля.

Но в общем — вот так.
  • 🔥 6
  • ❤ 2
  • 🌚 1
More from @bodrcoder
  1. Sep 25, 2026Всех с пятницей. #пятничныйюмор
  2. Sep 24, 2026Думаю что сейчас будут все более популярны те сервисы, которые поддерживают MCP. Скоро Нов…
  3. Sep 22, 2026Разбирал вещи, очень сильно обрадовался что нашел сокровище. Но правда оказалась печальнее…
  4. Sep 17, 2026Купился на новый инференс uzu - который обещал гипер скорость на маке. Но я когда затащил…
  5. Sep 17, 2026Post #812
  6. Sep 17, 2026Кто каким стулом пользуется для работы? У меня в свое время самый удобный стул был - за 10…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →