Cung cấp URL thân thiện cho một trang web so với thực tế của ID cơ sở dữ liệu


24

Chúng tôi có một cơ sở dữ liệu về tài nguyên, có thể là sản phẩm, bài đăng trên blog hoặc một cái gì đó. Chúng tôi cần thiết kế một lược đồ URL để giải quyết chúng, cho trang web công cộng.

Dưới đây là hai ví dụ bị ràng buộc ID cơ sở dữ liệu:

Đây là một ví dụ thân thiện:

(Một thoáng nhìn về cuộc sống duyệt web của tôi ở đó)

Tôi thích các URL thân thiện vì bạn có ý tưởng về những gì ở cuối URL khi bạn di chuột hoặc nhìn thấy nó trong email hoặc tài liệu. Nó tốt hơn cho SEO, hoặc nó đã từng.

Điều gì xảy ra khi tài liệu hoặc sản phẩm được đổi tên? Hoặc vì nó đã thay đổi (Wiki có thể không thay đổi nhưng tài nguyên của chúng tôi có thể) hoặc do lỗi đánh máy, phải không? Tài nguyên của chúng tôi rất kỹ thuật, từ dài và dễ bị lỗi.

Ngoài ra, chúng tôi có một ID cơ sở dữ liệu, đó là một số. Hãy xem xét một ý tưởng cho một địa chỉ của video bằng cách sử dụng cửa hàng cho thuê giả vờ:

ID rõ ràng và được sử dụng trong tra cứu DB. Khỏe.

Bit cửa trượt không phải là duy nhất và chỉ được tạo từ tiêu đề video, nó có thể được xác minh trên GET, vì vậy nếu cửa trượt được nhập và không khớp với những gì thực sự trong tài liệu 287171, nó đáp ứng 404.

Hoặc có lẽ nó có thể bị bỏ qua, cho phép con người dính bất cứ thứ gì họ thích vào đó, nếu có ai đó quan tâm. Vì vậy, URL này cũng sẽ hoạt động:

Vấn đề với việc xác minh phần thân thiện là, như đã đề cập, vấn đề đổi tên hoặc sửa lỗi chính tả. Nếu tên đã thay đổi và trong miền của chúng tôi điều đó xảy ra, chúng tôi không muốn phá vỡ các URL ở ngoài đó, vì vậy chúng tôi nên:

  • Chỉ cần không xác minh phần thân thiện.

  • Xác minh, nhưng thêm 'lịch sử' các phần thân thiện vào bản ghi cơ sở dữ liệu để mọi ID thân thiện trước đó vẫn hoạt động!

Suy nghĩ và ý tưởng của bạn đều được chào đón.

Luke


11
ngay cả trang web này cũng sử dụng kết hợp http://programmers.stackexchange.com/questions/255684/providing-friendly-urls-for-a-website-vs-realities-of-database-ids(sử dụng phiên bản chưa được xác minh để thay đổi tiêu đề, liên kết "chia sẻ" ngắn hơn chỉ là id: http://programmers.stackexchange.com/q/255684/25768(và id người dùng để theo dõi huy hiệu)
ratchet freak

11
Nếu bạn có một id duy nhất trong URL của mình, tôi không hiểu lý do tại sao bạn muốn xác minh phần sên. Sử dụng nó cho vẻ ngoài và bỏ qua nó cho tra cứu.
thorsten müller

Nếu một trong hai bạn muốn đưa ra một câu trả lời thích hợp, tôi sẽ bỏ phiếu để bạn nhận được điểm. Tôi sẽ để phiếu bầu đến và trao giải cho câu trả lời được bình chọn nhiều nhất trong một vài ngày.
Luke Puplett


3
Chưa bao giờ biết thuật ngữ sên trước đây. Tôi phải ở dưới một tảng đá. Geddit?
Luke Puplett

Câu trả lời:


6

Giữ ID trong URL là phương pháp chứng minh trong tương lai nhất và như bạn đã chứng minh, các URL vẫn có thể trông tương đối tốt.

Một tùy chọn khác được sử dụng bởi nhiều dự án là giữ một lịch sử của các con sên được sử dụng trước đó. Khi tiêu đề thay đổi, bạn cập nhật sên và nếu ai đó cố gắng tìm kiếm một con sên lỗi thời, hãy tìm trong danh sách các con sên cũ. Bằng cách đó, sên cũ có thể được sử dụng lại cho nội dung mới (hoặc không phụ thuộc vào việc triển khai của bạn).

Wordpress đã làm điều đó và đá quý Friendly_id cũng có thể là loại đá quý được sử dụng nhiều nhất để quản lý id thân thiện cho Rails.

Ngoài ra, trong khi tôi thích các URL ưa nhìn, tôi nghĩ điều quan trọng cần nhớ là đây rất có thể là một tính năng được sử dụng bởi những người dùng am hiểu công nghệ hơn. Một số trình duyệt thậm chí bắt đầu ẩn URL (hoặc một phần của nó).


2
Lịch sử sên này là những gì tôi đã xem xét. Kể từ khi đăng câu hỏi, tôi đã nhận thấy nhiều trang web lớn có tên sên không được kiểm tra, bạn có thể thay đổi nó để nói bất cứ điều gì. amazon.co.uk/Blah-Blah-Blah/dp/B004R276L8 hoạt động. StackExchange rất thông minh vì nó 'sửa chữa' và chuyển hướng trình duyệt để đảm bảo liên kết đúng được hiển thị và chia sẻ.
Luke Puplett

"Sên" ít hữu ích hơn cho mọi người và hữu ích hơn cho Tối ưu hóa Công cụ Tìm kiếm, vì "sên" hoặc "URL thân thiện" nên có các từ khóa liên quan đến nội dung của trang. Người dùng nâng cao không phải là lý do để đưa URL thân thiện vào trang web của bạn. Thứ hạng công cụ tìm kiếm có xu hướng là lý do chính.
Greg Burghardt

Tôi không đồng ý. Các URL chỉ có ID rất khó để làm việc; thật khó để nhớ từ một danh sách của họ mà bạn có thể muốn quay lại. Hoặc liệu sẽ có một cái gì đó không phù hợp ở đầu kia của liên kết. Thanh địa chỉ của Chrome cũng đề xuất trên bất kỳ phần nào của URL, điều này cũng hữu ích.
Luke Puplett

1
@LukePuplett vâng Tôi tin rằng cách xử lý URL của SE là dễ nhất khi nói về sên.
mbillard

@GregBurghardt sự khác biệt duy nhất là ở tỷ lệ nhấp, người dùng có xu hướng nhấp nhiều hơn vào các URL thân thiện: stackoverflow.com/questions/505793/
Lỗi

3

Tôi đã sử dụng hai kịch bản khác nhau trong quá khứ.

  1. /id/some-slugnơi những idđược sử dụng để tra cứu , sên không. Do đó , sên có thể là bất cứ điều gì . Nhưng, khi sên không khớp với sên thực tế, người dùng được chuyển hướng đến phiên bản hiện tại.

  2. /permalinkđối với trường hợp chúng tôi không muốn có id trong url hoặc nơi url không bao giờ thay đổi, mặc dù có sẵn id (xem [1][2] ). Tất nhiên, trong trường hợp này các permalinkđược sử dụng cho việc tra cứu . Cả sên hiện tại và permalink (sên đầu tiên) đều được lưu trữ trong cơ sở dữ liệu.

Trong cả hai cách này, bạn cần phải giữ một lịch sử của sên trong cơ sở dữ liệu của mình, điều này sẽ sớm gặp vấn đề.


ps: Trong trường hợp thứ hai, bạn sẽ cần một số định tuyến rất cụ thể để giữ các khoản tín dụng xã hội:

  • nếu bạn muốn, hãy chuyển hướng người dùng đến url hiện tại (không phải permalink)
  • có permalink được sử dụng làm url trong các nút xã hội
  • luôn chuyển hướng trình thu thập thông tin facebook đến permalink

Xem [1][2] một lần nữa.


Tại sao nó sẽ có vấn đề? Nếu tôi giữ và ID và sên là bất cứ điều gì, khách truy cập sẽ đi đến trang thực tế. Nó sẽ có hại cho SEO?
J Namaranjan

Bạn có nghĩa là giữ một lịch sử của sên? Bạn làm gì khi ai đó muốn sử dụng lại sên như vậy? Cho cùng hoặc id khác? Làm thế nào để bạn thiết kế cơ sở dữ liệu và / hoặc mã để ngăn chặn nhiều chuyển hướng? Bạn có muốn che giấu sự tồn tại sau khi xóa và được chuyển hướng phơi bày sự tồn tại trước đó? Tất cả điều này không phải là không thể, nhưng nó đặt ra tất cả các loại câu hỏi mà tôi chỉ muốn ngăn chặn bằng thiết kế.
Lode

Điều tôi muốn nói là nếu ID có trong URL thì không có vấn đề gì về sên, nó sẽ được chuyển hướng đến trang được yêu cầu. Sau đó, lịch sử sên không thành vấn đề. Tôi đồng ý rằng nó là vấn đề cho Android mặc dù.
J Namaranjan

1
À được rồi. Đó là những gì tôi đã thêm một kịch bản 1 phải không? Hay bạn ám chỉ điều gì khác?
Lode

Vâng. Đúng rồi.
J Namaranjan

2

Điều gì xảy ra khi tài liệu hoặc sản phẩm được đổi tên?

Phản hồi HTTP 301 (Đã chuyển) được thiết kế cho mục đích này. Nếu bất kỳ khách hàng nào chuyển đến URI cũ, bạn chỉ cần gửi cho họ URI mới và họ có thể chuyển hướng đến đó.

Bit cửa trượt không phải là duy nhất và chỉ được tạo từ tiêu đề video, nó có thể được xác minh trên GET, vì vậy nếu cửa trượt được nhập và không khớp với những gì thực sự trong tài liệu 287171, nó đáp ứng 404.

Nếu tôi làm theo đúng thì đây là công việc sao chép, bạn có cả định danh tên cho tài nguyên và id trong cùng một URI. Điều đó không phục vụ cho bất kỳ mục đích nào.

Nếu bạn lo lắng về việc nhiều bộ phim có cùng tên, bạn có thể thêm thông tin bổ sung về bộ phim vào URL

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

hoặc là

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

Đã nói rằng không có gì sai khi sử dụng ID nếu điều đó có ý nghĩa đối với mô hình dữ liệu của bạn, đặc biệt nếu điều duy nhất bạn đang nhóm là chúng là video.

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

Khách hàng, dù là máy tính hay người dùng không nên quá phụ thuộc vào cấu trúc URI, họ nên xem xét nội dung bạn đã quay lại để tìm ra tài nguyên nào cần tìm.

Không có gì sai khi có một hệ thống URI hợp lý giúp ai đó dễ dàng đoán được vị trí của tài nguyên hoặc điều hướng lên xuống cấu trúc dựa trên các thuộc tính được chia sẻ (ví dụ như tất cả các phim trong năm 2004), nhưng hệ thống của bạn không nên dựa vào về điều đó và không khách hàng nào nên phá vỡ nếu bạn thay đổi URI của mình

Hoặc nói cách khác, bạn sẽ có thể thay đổi qua đêm từ

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

đến

http://vidsyeah.com/video/12323

và không khách hàng nào nên phá vỡ vì khách hàng nên xem nội dung không phải URL.


Giống như câu trả lời của Jon, tôi nghĩ bạn không đội mũ UX khi nghĩ về điều này. Tôi muốn tăng khả năng sử dụng của địa chỉ. Xem nhận xét của tôi trong câu hỏi: "Tôi thích các URL thân thiện vì bạn có ý tưởng về những gì ở cuối URL khi bạn di chuột hoặc nhìn thấy nó trong email hoặc tài liệu. Nó tốt hơn cho SEO, hoặc nó đã từng như vậy."
Luke Puplett

2
Để ném 301, tôi cần có khả năng tra cứu tài nguyên chính xác, do đó tôi cần một lịch sử.
Luke Puplett

1
Bạn sẽ cần một lịch sử, nhưng nếu bạn có một trang web có tài nguyên thay đổi thì đó vẫn là một ý tưởng hay.
Cormac Mulhall

Không có vấn đề với các URI thân thiện. Tôi sẽ không thực hiện sơ đồ rằng URI có thể là bất cứ thứ gì nhưng vẫn hoạt động nếu cuối cùng nó có ID. Điều đó không thực sự giải quyết bất kỳ vấn đề nào (người dùng vẫn phải nhớ ID) và giới thiệu sơ đồ URI khó hiểu (người dùng có thể hỏi một cách hợp pháp tại sao hai URI khác nhau, một lỗi chính tả, đi đến cùng một tài nguyên)
Cormac Mulhall

1
Nếu bạn lo ngại về các lỗi chính tả trong URI, một cách phổ biến để xử lý vấn đề này là các URI được đề xuất trong trang lỗi 404 cho URL viết sai chính tả. Bạn có thể thực hiện tìm kiếm mẫu từ và trả lại những gì bạn nghĩ người dùng có thể đang tìm kiếm.
Cormac Mulhall

1

BBC sử dụng sên đó là:

  • số alpha (cho sự gọn nhẹ)
  • độc đáo (đối với tra cứu)
  • không tuần tự (để các thứ tự được thêm vào db không bị lộ)

ví dụ: http://www.bbc.co.uk/programmes/b006mk7h

Mỗi chương trình công cộng có cả ID và sên. ID sau đó có thể là số nguyên tăng tự động như bình thường và các khoảng trống không bị lộ.


0

Từ quan điểm RESTful, các URI nên tuân theo cấu trúc phân cấp có thể dự đoán được và phá vỡ để tăng cường khả năng sử dụng.

Điều này sẽ làm cho chúng dễ sử dụng hơn bởi người tiêu dùng. Nếu dữ liệu của bạn có mối quan hệ, thì một số loại phân cấp sẽ là cần thiết.

Có vẻ như chương trình này là: \video\[name]\[id]

Nếu tên không được sử dụng cho bất kỳ phân loại nào nữa, nó có thể được bỏ qua để ủng hộ \video\[id].

Tuy nhiên, nếu bạn muốn phân loại các video thì có lẽ tên này hữu ích.

Ví dụ:

  • \ video \ Đu quay \ 123
  • \ video \ Đu quay \ 124
  • \ video \ SlidingDoors \ 125
  • \ video \ SlidingDoors \ 126

Đây thực sự là một quyết định thiết kế về cách truy cập được mô hình hóa.


Tôi nghĩ rằng bạn đang nghĩ về điều này từ một kiến ​​trúc thông tin API / trang web PoV. Tôi đang tìm cách giới thiệu một phần URL thân thiện được tạo để giúp con người và SEO. Rõ ràng đây là một điều phổ biến và có tên là 'sên'. Tên này không được sử dụng để phân loại và được thêm (không bỏ) để tạo UX tốt hơn với URL và trang web / nhãn hiệu của chúng tôi.
Luke Puplett
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.