2015-09-27 3 views
0

У меня проблема дизайна с моим SPA, и надеюсь, что кто-то может дать мне какое-то направление. Страница профиля пользователя визуализируется как это:Как сопоставить настраиваемый URL-адрес ресурса REST в SPA?

  1. Браузер получает /some-username.

  2. Сервер проверяет, был ли запрос XMLHTTPRequest или нет. Это не так, и поэтому он просто возвращает связанное приложение javascript в браузер для выполнения.

  3. Комплект javascript выполнен в браузере, он видит текущий URL-адрес и отправляет запрос AJAX, а затем /some-username.

  4. Сервер видит заголовок XMLHTTPRequest, просматривает пользователя, у которого есть пользовательский URL «/ some-username», и возвращает данные JSON о пользователе обратно в javascript для рендеринга.

Это неправильно. Приложение должно делать запросы RESTful на /users/:id для извлечения пользовательских данных. Но как он может знать идентификатор, который соответствует пользователю с URL-адресом /some-username?

Стоит добавить дополнительный HTTP-запрос только для поиска идентификатора ресурса? Что-то вроде /get_user_id?url=/some-username.

+0

Есть ли какая-либо особая причина, по которой запрос должен идти в '/ users /: id'? – zeroflagL

+0

Я пытаюсь создать RESTful API. Извлечение ресурса с помощью настраиваемого URL-адреса - неправильный путь. – 1in7billion

+1

@ 1in7billion Мы говорим о двух разных URL-адресах, здесь описывается состояние клиента SPA REST, а другое - ресурс REST. Если вы этого не видите, то у вас, очевидно, нет навыков, необходимых для разработки чего-либо «RESTful». Вероятно, вам это не понадобится, потому что ваше приложение не будет иметь сторонних клиентов, так что все в порядке. – inf3rno

ответ

1

Вы гибки в своем API? Если это так, вы можете изменить /some-username на /user-id или если вы хотите включить имя пользователя /user-id/username, но игнорировать имя пользователя.

В качестве альтернативы также распространяться запросы в форме фильтра. Как /users?username=peter

И не стесняйтесь использовать /users/peter, если ваше имя пользователя идентифицирует пользователя. Безусловно, это фактический идентификатор (который не обязательно должен быть целым), а затем ваш адрес точно равен /users/:id

+0

URL-адреса должны оставаться обычными. Например, Twitter. Ваш второй момент интересен.Приложение может извлекать пользовательский ресурс через '/ users? Url =/some-username'. – 1in7billion

+0

Почему вы хотите указать URL вместо имени пользователя? – sbeliakov

+0

javascript не знает имя пользователя. Он загружает, инициализирует, и маршрутизатор видит, что текущий URL-адрес '/ some-username'. У пользователя пока нет данных о пользователе. Я должен упомянуть, что пользователь также может изменить свой собственный URL-адрес, поэтому мы не можем предположить их имя пользователя === 'some-username'. – 1in7billion

1

Нет ничего «unRESTful» около /some-username. Это просто еще один ресурс. Ответ - я надеюсь - содержит канонический URL-адрес /user/id в любом случае, либо в виде заголовка, либо как своего рода «я».

Это также, как вы могли достичь своей цели. Вставить URL на странице или как JavaScript или как эквивалент заголовка (к сожалению, вы не можете прочитать заголовки запроса страницы с JavaScript):

//header. Can also use a custom header like X-User-Location 
<meta http-eqiv="Location" content="/user/id"> 

//JavaScript 
<script> 
var userURL = '/user/id 
</script> 

Я рекомендую оставить свой текущий подход.

+0

Я попробую это, спасибо. – 1in7billion