UUID в качестве первичного ключа - руководство по REST API - PullRequest
0 голосов
/ 21 декабря 2018

В postgres я создал таблицу:

create table examples(id uuid PRIMARY KEY DEFAULT uuid_generate_v4(),
                     name VARCHAR);

Чтобы получить все свои значения из примера таблицы, я создал конечную точку в своем обработчике фреймворка:

GET "/examples[/]?"

Если бы я былс использованием типа SERIAL или INT в качестве моего ПЕРВИЧНОГО КЛЮЧА моя конечная точка для отдельного значения примера будет выглядеть так:

GET "/examples/([0-9]+)*"

Но я использую UUID в качестве первичного ключа, и я создал этого монстра: P

GET "/examples/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[0-9a-f][0-9a-f]{3}-[0-9a-f]{12})"

Пример использования:

examples/ef935fbc-8c43-4b22-b160-14124a29312e
examples/{uuid}

В моем случае это работает, но, возможно, есть лучший способ сделать это?Есть ли хорошие рекомендации, которые говорят, как справиться с такими проблемами?

1 Ответ

0 голосов
/ 22 декабря 2018

Что касается REST , то использование строкового представления UUID в качестве части сегмента пути хорошо.Это просто текст.Поскольку REST-клиенты просто следуют ссылкам, предоставленным им сервером, на самом деле не имеет значения, какое написание используется.

Некоторые варианты будут проще в управлении вашей маршрутизацией структурой,но ваш выбор маршрутизации является деталью реализации, и не имеет никакого отношения к потребителям вашего API.

Нет ничего действительно плохого в том, чтобы использовать инфраструктуру для грубой маршрутизации, а затем самостоятельно реализовать детальный контроль

GET /examples/{data}

if (isUUID(data)):
    // cast the data to an id yourself, then do the right thing
if "the-other-thing" == data:
    // do the other thing
...