У меня есть клиент Vue.js (проблема НЕ специфичная для Vue) и API отдыха с использованием парадигмы HATEOAS.У меня есть несколько программ (которые в настоящее время имеют имя и метку времени), которые я могу просматривать, редактировать и создавать.Поэтому конечная точка [BASE_URL] / api / Programs существует и возвращается при вызове корневой конечной точки (GET [BASE_URL]/api/
)
Создание GET [BASE_URL]/api/programs
возвращает все программы и ссылку для POSTing новой программы , если пользователь разрешен .
Если эта ссылка доступна, я отображаю кнопку создания .
Это уже приводит к моей проблеме,Как и в моем случае, у меня есть другой компонент Vue для этого.Поэтому, если пользователь нажимает кнопку, я не знаю ссылку POST в новом компоненте.
Ответ при запуске приложения (корневая конечная точка):
GET https://localhost:5001/api/
{
"links": [
{
"href": "https://localhost:5001/api/Programs",
"rel": "all-programs",
"method": "GET"
}
]
}
Ответ при перечислении всех программ:
GET https://localhost:5001/api/Programs
{
"programs": [
{
"id": 1,
"name": "MSR Hard 1 - 22mm",
"createdAt": "2019-05-20T14:44:30.9508437",
"srmSettings": [],
"links": [
{
"href": "https://localhost:5001/api/Programs/1",
"rel": "self",
"method": "GET"
},
{
"href": "https://localhost:5001/api/Programs?id=1",
"rel": "update",
"method": "PUT"
}
]
}
],
"links": [
{
"href": "https://localhost:5001/api/Programs",
"rel": "self",
"method": "GET"
},
{
"href": "https://localhost:5001/api/Programs",
"rel": "create",
"method": "POST"
}
]
}
Теперь у меня есть два варианта.
Первый
Я мог бы передать ссылку на компонент создания.Но пользователь может напрямую перейти к созданию страницы, введя [base-url]/new-program
в браузере.
В этом случае я вижу следующие проблемы:
- У меня нет URL для публикации.(хотя у меня есть корневой контроллер, который отправляет мне URL для загрузки всех программ при запуске приложения - я мог бы использовать этот также для POSTing)
- Если пользователю не разрешено создавать программу, ошибкабудет отправлено после того, как пользователь POST запустил программу, нажав кнопку SAVE - что очень поздно (но это первый контакт с сервером в данный момент).
Second
Сделайте запрос «init», когда компонент отображается (например, GET https://localhost:5001/api/Programs/init
).Это возвращает инициализированный объект (может быть предварительно заполненный некоторыми значениями) вместе с доступными ссылками (ссылка для POSTing) или 403 - Запрещено, если пользователю не разрешено создавать программу.
* * * * * * * * * * * *ссылка вместо создать ссылку отправляется GET https://localhost:5001/api/Programs
.Кнопка создания в представлении списка имеет вид , отображается только , если доступна init link .
Но у этого тот же недостаток , что и у первогоподход, когда пользователь непосредственно переходит на эту страницу.
- Мне нужно жестко закодировать ссылку «init» (или создать ее на основе ссылки «all-Programs» корневой конечной точки)
Пожалуйста, поделитесь своими мыслями со мной.Я не уверен, что я что-то пропустил, или я не понимаю парадигму, или я просто что-то делаю неправильно: -)
Заранее спасибо!
Кристоф