웹 사이트에 친숙한 URL 제공 및 데이터베이스 ID의 현실


24

우리는 제품, 블로그 게시물 등의 리소스 데이터베이스를 보유하고 있습니다. 공개 웹 사이트를 위해 URL 체계를 설계해야합니다.

다음은 데이터베이스 ID 바인딩 된 두 가지 예입니다.

다음은 친근한 예입니다.

(내 브라우징 생활을 조금 엿볼 수 있습니다)

이메일이나 문서에서 URL을 가리 키거나 볼 때 URL 끝에 무엇이 있는지 알기 때문에 친숙한 URL을 좋아합니다. SEO에 더 좋거나 예전에는 좋았습니다.

문서 나 제품의 이름을 바꾸면 어떻게됩니까? 변경 되었기 때문에 (Wiki는 변경되지 않지만 리소스는 변경 될 수 있음) 또는 오타 때문에 발생합니까? 우리의 자원은 매우 기술적이고 긴 단어이며 오류가 발생하기 쉽습니다.

또한 데이터베이스 ID는 숫자입니다. 가장 한 대여점을 사용하여 동영상 주소에 대한 아이디어를 살펴 보겠습니다.

ID는 분명하며 DB 조회에 사용됩니다. 벌금.

슬라이딩 도어 비트는 고유하지 않으며 비디오 타이틀에서 방금 생성되었으므로 GET에서 확인할 수 있으므로 글라이딩 도어가 입력되어 문서 287171의 내용과 일치하지 않으면 404로 응답합니다.

또는 누군가 무시하고 있다면 인간이 원하는 것을 고수 할 수 있도록 무시해도됩니다. 따라서이 URL은 다음과 같이 작동합니다.

친숙한 부분을 확인하는 문제는 언급했듯이 이름 변경 또는 오타 수정 문제입니다. 이름이 변경되고 도메인에서 발생하는 경우 외부에있는 URL을 중단하고 싶지 않으므로 다음과 같이해야합니다.

  • 친절한 부분 만 확인하지 마십시오.

  • 데이터베이스 레코드에 친숙한 부분의 '이력'을 추가하여 이전의 친숙한 ID가 계속 작동하는지 확인하십시오!

당신의 생각과 아이디어는 환영합니다.

누가


11
이 사이트에서도 조합을 사용합니다 http://programmers.stackexchange.com/questions/255684/providing-friendly-urls-for-a-website-vs-realities-of-database-ids(제목 변경에 비추어 검증되지 않은 버전 사용, 짧은 "공유"링크는 ID 일뿐입니다 : http://programmers.stackexchange.com/q/255684/25768(및 배지 추적을위한 사용자 ID))
ratchet freak

11
URL에 고유 ID가 있으면 왜 슬러그 부분을 확인 하려는지 알 수 없습니다. 찾아보기에는 사용하고 찾아보기에는 무시하십시오.
thorsten müller

어느 쪽이든 정답을주고 싶다면 투표를해서 점수를 얻습니다. 나는 투표를 시작하고 며칠 만에 가장 투표에 대한 답변을 수여합니다.
Luke Puplett


3
슬러그라는 용어를 알지 못했습니다. 나는 바위 아래 있었을 것입니다. 게딧?
Luke Puplett

답변:


6

URL에 ID를 유지하는 것이 가장 미래에 대비할 수있는 방법이며 시연 한 것처럼 URL은 여전히 ​​비교적 좋아 보입니다.

여러 프로젝트에서 사용하는 또 다른 옵션은 이전에 사용한 슬러그의 이력을 유지하는 것입니다. 제목이 변경되면 슬러그를 업데이트하고 누군가가 쓸모없는 슬러그를 찾으려면 오래된 슬러그 목록에서 검색하십시오. 이렇게하면 오래된 슬러그를 새로운 컨텐츠에 재사용 할 수 있습니다 (구현에 따라 다름).

워드 프레스는 그렇게 했으며 레일스의 친숙한 ID를 관리하기 위해 가장 많이 사용되는 gem 인 friendly_id 보석도 마찬가지 였습니다.

또한 잘 보이는 URL을 좋아하지만 더 기술에 정통한 사용자가 사용하는 기능 일 가능성이 높습니다. 일부 브라우저는 URL (또는 그 일부)을 숨기기 시작합니다.


2
이 슬러그 역사는 내가 고려한 것입니다. 질문을 게시 한 이후, 나는 확인되지 않은 슬러그가있는 많은 유명 사이트를 발견했습니다. amazon.co.uk/Blah-Blah-Blah/dp/B004R276L8이 작동합니다. StackExchange는 올바른 링크가 표시되고 공유되도록 브라우저를 '수정'하고 리디렉션하기 때문에 영리합니다.
Luke Puplett

"슬러그"는 사람들에게 유용하지 않으며 검색 엔진 최적화에 더 유용합니다. "슬러그"또는 "친숙한 URL"에는 페이지의 내용과 관련된 키워드가 있어야합니다. 고급 사용자는 사이트에 친숙한 URL을 포함시킬 이유가 없습니다. 검색 엔진 순위가 주된 이유입니다.
Greg Burghardt

동의하지 않습니다. ID 만있는 URL은 다루기가 어렵습니다. 어떤 목록으로 돌아가고 싶습니까? 또는 링크의 다른 쪽 끝에 부적절한 것이 있는지 여부입니다. Chrome의 주소 표시 줄은 URL의 어느 부분에도 제안되어있어 유용합니다.
Luke Puplett

1
@LukePuplett 예 SE가 URL을 다루는 방법이 슬러그와 관련하여 가장 쉬운 방법이라고 생각합니다.
mbillard

유일한 차이점은 클릭률에 @GregBurghardt, 사용자 친화적 인 URL을 약간 더 클릭하는 경향이 : stackoverflow.com/questions/505793/...
mbillard

3

과거에는 두 가지 시나리오를 사용했습니다.

  1. /id/some-slug여기서 id조회하는데 사용되는 , 슬러그 없다. 따라서 슬러그는 무엇이든 될 수 있습니다 . 그러나 슬러그가 실제 슬러그와 일치하지 않으면 사용자는 현재 버전으로 리디렉션됩니다.

  2. /permalink경우에 우리는 URL의 ID 싶지 않았다 , 또는 어디 URL을 변경해서는 안됩니다을 하더라도 ID를 사용할 수있다 (참조 [1][2] ). 물론,이 경우 permalink조회에 사용됩니다 . 현재 슬러그와 영구 링크 (첫 번째 슬러그)는 모두 데이터베이스에 저장됩니다.

이 두 가지 방법으로 데이터베이스에 슬러그의 이력을 유지해야하므로 곧 문제가 발생할 수 있습니다.


추신 : 두 번째 경우 소셜 크레딧을 유지하려면 매우 구체적인 라우팅이 필요합니다.

  • 원하는 경우 사용자를 현재 (비 퍼머 링크가 아닌) URL로 리디렉션
  • 소셜 버튼에서 영구 링크를 URL로 사용
  • 항상 페이스 북 크롤러를 퍼머 링크로 리디렉션

[1][2]를 다시 참조 하십시오.


왜 문제가 될까요? 내가 보관하고 ID와 슬러그가 무엇이든 방문자는 실제 페이지로 이동합니다. SEO에 해로운가요?
Jnanaranjan

슬러그의 역사를 유지하는 것을 의미합니까? 누군가가 그러한 슬러그를 재사용하고 싶을 때 어떻게합니까? 동일하거나 다른 ID? 다중 리디렉션을 방지하기 위해 데이터베이스 및 / 또는 코드를 어떻게 설계합니까? 삭제 후 존재를 숨기고 이전 존재를 노출시키는 리디렉션입니까? 이 모든 것이 불가능하지는 않지만 디자인으로 막는 모든 종류의 질문을 제기합니다.
Lode

내가 말하고 싶은 것은 ID가 URL에 있으면 슬러그가 무엇이든간에 요청 된 페이지로 리디렉션됩니다. 그런 다음 슬러그 기록은 중요하지 않습니다. 그래도 안드로이드에는 문제가 있음에 동의합니다.
Jnanaranjan

1
아 알았어 이것이 바로 시나리오 1을 추가 한 것입니까? 아니면 다른 의미가 있습니까?
Lode

예. 맞아요.
Jnanaranjan

2

문서 나 제품의 이름을 바꾸면 어떻게됩니까?

HTTP 응답 301 (이동)은 이러한 목적으로 설계되었습니다. 클라이언트가 이전 URI로 이동하면 새 URI를 보내면 해당 URI로 리디렉션 할 수 있습니다.

슬라이딩 도어 비트는 고유하지 않으며 비디오 타이틀에서 방금 생성되었으므로 GET에서 확인할 수 있으므로 글라이딩 도어가 입력되어 문서 287171의 내용과 일치하지 않으면 404로 응답합니다.

올바르게 수행하면 작업이 중복됩니다. 자원의 이름 식별자와 동일한 URI의 ID가 모두 있습니다. 그것은 어떤 목적에도 도움이되지 않습니다.

동일한 이름을 가진 여러 영화가 걱정되는 경우 영화에 대한 추가 정보를 URL에 추가 할 수 있습니다

http://vidsyeah.com/video/2000/sliding_doors
http://vidsyeah.com/video/1932/sliding_doors

또는

http://vidsyeah.com/video/studios/paramount/sliding_doors
http://vidsyeah.com/video/studios/warnerbros/sliding_doors

데이터 모델에 적합하다면 ID를 사용하는 데 아무런 문제가 없다고 말한 것입니다. 특히 그룹화하는 유일한 것이 비디오라는 것입니다.

http://vidsyeah.com/video/210232
http://vidsyeah.com/video/2342

컴퓨터 또는 개인 사용자 인 클라이언트는 처음에 URI 구조에 너무 의존해서는 안되며, 찾은 리소스를 파악하기 위해 반환 한 콘텐츠를보고 있어야합니다.

합리적인 URI 시스템을 가진 사람에게는 문제가 없습니다. 누군가가 리소스의 위치를 ​​쉽게 추측하거나 공유 속성 (예 : 2004 년의 모든 영화)을 기반으로 구조를 위아래로 탐색 할 수 있지만 시스템은 의존해서는 안됩니다 URI를 변경하면 클라이언트가 중단되지 않아야합니다.

또는 다른 방식으로 바꾸려면 밤새 바꿀 수 있어야합니다.

http://vidsyeah.com/video/studios/paramount/sliding_doors

http://vidsyeah.com/video/12323

클라이언트가 URL이 아닌 컨텐츠를보고 있어야하므로 클라이언트가 중단되지 않아야합니다.


Jon의 답변과 마찬가지로, 이것에 대해 생각할 때 UX 모자를 쓰고 있지 않다고 생각합니다. 주소의 사용성을 높이고 싶습니다. 질문에서 내 의견을 참조하십시오. "이메일이나 문서에서 URL을 가리 키거나 보았을 때 URL 끝에 무엇이 있는지 알기 때문에 친숙한 URL이 마음에 듭니다. SEO에 더 좋거나 예전에는 좋았습니다."
Luke Puplett

2
301을 던지기 위해서는 올바른 리소스를 찾을 수 있어야하므로 기록이 필요합니다.
Luke Puplett

1
역사가 필요하지만 변경 될 수있는 리소스가있는 사이트가 있다면 어쨌든 좋은 생각입니다.
Cormac Mulhall

친숙한 URI에는 문제가 없습니다. URI가 무엇이든 될 수있는 계획을 수행하지는 않지만 끝에 ID가 있으면 여전히 작동합니다. 그것은 실제로 어떤 문제도 해결하지 못하고 (사용자는 여전히 ID를 기억해야 함) 혼란스러운 URI 체계를 도입합니다 (사용자는 철자가 틀린 두 개의 다른 URI가 동일한 리소스로 이동하는 이유를 합법적으로 요청할 수 있습니다)
Cormac Mulhall

1
URI의 철자 오류에 대해 염려되는 경우이를 처리하는 일반적인 방법은 철자가 틀린 URL의 404 오류 페이지에 URI를 제안하는 것입니다. 단어 패턴 검색을 수행하고 사용자가 찾고 있다고 생각하는 것을 되돌릴 수 있습니다.
Cormac Mulhall

1

BBC는 다음과 같은 슬러그를 사용합니다.

  • 영숫자 (압축성)
  • 고유 (조회 용)
  • 비 순차적 (DB에 추가 된 순서가 노출되지 않도록)

예 : http://www.bbc.co.uk/programmes/b006mk7h

각 공공 프로그램에는 ID와 슬러그가 모두 있습니다. 그러면 ID는 평소와 같이 자동 증가 정수가 될 수 있으며 간격이 노출되지 않습니다.


0

RESTful 관점에서 URI는 사용성을 향상시키기 위해 예측 가능하고 단계적인 계층 구조를 따라야합니다.

이를 통해 소비자가보다 쉽게 ​​사용할 수 있습니다. 데이터에 관계가있는 경우 일종의 계층이 필요합니다.

계획은 다음과 같습니다. \video\[name]\[id]

추가 분류에 이름을 사용하지 않는 경우 이름이 삭제 될 수 있습니다. \video\[id].

그러나 비디오를 분류하려면 이름이 유용 할 수 있습니다.

예 :

  • \ video \ SwingingDoors \ 123
  • \ video \ 스윙 어문 \ 124
  • \ video \ 미닫이 문 \ 125
  • \ video \ 미닫이 문 \ 126

액세스 모델링 방법에 대한 설계 결정입니다.


API / 사이트 정보 아키텍처 PoV에서 이에 대해 생각하고 있다고 생각합니다. 인간과 SEO를 돕기 위해 생성 된 친숙한 URL 부분을 소개하려고했습니다. 분명히 이것은 일반적인 것이며 '슬러그'라는 이름으로갑니다. 이름은 분류에 사용되지 않으며 URL 및 사이트 / 브랜드로 더 나은 UX를 만들기 위해 추가 (삭제되지 않음)됩니다.
Luke Puplett
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.