ให้ URL ที่เป็นมิตรกับเว็บไซต์และความเป็นจริงของรหัสฐานข้อมูล


24

เรามีฐานข้อมูลทรัพยากรไม่ว่าจะเป็นผลิตภัณฑ์โพสต์บล็อกหรืออะไร เราจำเป็นต้องออกแบบชุดรูปแบบ URL เพื่อระบุที่อยู่สำหรับเว็บไซต์สาธารณะ

นี่คือสองตัวอย่างที่ผูก ID ฐานข้อมูล:

นี่คือตัวอย่างที่เป็นมิตร:

(เหลือบเล็ก ๆ น้อย ๆ ในชีวิตการท่องของฉันมี)

ฉันชอบ URL ที่จดจำง่ายเนื่องจากคุณมีความคิดเกี่ยวกับสิ่งที่อยู่ท้าย URL เมื่อคุณเลื่อนหรือดูในอีเมลหรือเอกสาร ดีกว่าสำหรับ SEO หรือเคยเป็นมาก่อน

จะเกิดอะไรขึ้นเมื่อเปลี่ยนชื่อเอกสารหรือผลิตภัณฑ์ อาจเป็นเพราะมันเปลี่ยนไป (Wiki อาจไม่เปลี่ยนแปลง แต่ทรัพยากรของเราสามารถทำได้) หรือเนื่องจากพิมพ์ผิดใช่ไหม ทรัพยากรของเรานั้นมีทั้งเทคนิคคำพูดยาว ๆ และข้อผิดพลาด

นอกจากนี้เรายังมี ID ฐานข้อมูลซึ่งเป็นตัวเลข ลองดูแนวคิดสำหรับที่อยู่ของวิดีโอโดยใช้ร้านเช่าที่ให้เช่า:

ID นั้นชัดเจนและถูกใช้ในการค้นหา DB ละเอียด.

บิตบานเลื่อนไม่ซ้ำกันและเพิ่งสร้างจากชื่อวิดีโอมันสามารถตรวจสอบได้บน GET ดังนั้นหากเข้าประตูร่อนและไม่ตรงกับสิ่งที่อยู่ใน doc 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(และรหัสผู้ใช้สำหรับการติดตามตรา)
ratchet freak

11
หากคุณมีรหัสเฉพาะใน URL ของคุณฉันไม่เห็นสาเหตุที่คุณต้องการยืนยันส่วนกระสุนเลย ใช้สำหรับรูปลักษณ์และละเว้นมันสำหรับการค้นหา
thorsten müller

หากคุณต้องการให้คำตอบที่ถูกต้องฉันจะลงคะแนนเพื่อให้คุณได้รับคะแนน ฉันจะให้คะแนนโหวตเข้ามาและให้คำตอบแก่ผู้โหวตมากที่สุดในสองสามวัน
ลุค Puplett


3
ไม่เคยรู้คำว่ากระสุนก่อนหน้านี้ ฉันต้องอยู่ใต้ก้อนหิน Geddit?
Luke Puplett

คำตอบ:


6

การเก็บ ID ไว้ใน URL เป็นวิธีการพิสูจน์ในอนาคตและเมื่อคุณสาธิต URL ยังคงดูค่อนข้างดี

ตัวเลือกอื่นที่ใช้โดยหลายโครงการคือการเก็บประวัติตัวบุ้งที่ใช้ก่อนหน้านี้ เมื่อชื่อเรื่องเปลี่ยนแปลงคุณจะอัพเดตกระสุนและถ้ามีคนพยายามหากระสุนที่ล้าสมัยให้ค้นหาในรายการกระสุนตัวเก่า ด้วยวิธีนี้ทากเก่าสามารถนำมาใช้ซ้ำสำหรับเนื้อหาใหม่ (หรือไม่ขึ้นอยู่กับการใช้งานของคุณ)

Wordpress ทำเช่นนั้นและทำให้เป็นมิตรอัญมณีซึ่งอาจเป็นอัญมณีที่ใช้มากที่สุดในการจัดการรหัสที่เป็นมิตรสำหรับ Rails

นอกจากนี้ในขณะที่ฉันชอบ URL ที่ดูดีฉันคิดว่ามันเป็นสิ่งสำคัญที่ต้องจำไว้ว่านี่น่าจะเป็นคุณลักษณะที่ใช้โดยผู้ใช้ที่มีความชำนาญด้านเทคโนโลยีมากกว่า เบราว์เซอร์บางตัวเริ่มที่จะซ่อน URL (หรือบางส่วน)


2
ประวัติกระสุนนี้เป็นสิ่งที่ฉันพิจารณา ตั้งแต่การโพสต์คำถามฉันพบว่าไซต์ที่มีชื่อขนาดใหญ่จำนวนมากที่มีกระสุนที่ไม่ได้ตรวจสอบคุณสามารถแก้ไขเพื่อพูดอะไรก็ได้ amazon.co.uk/Blah-Blah-Blah/dp/B004R276L8 ใช้งานได้ StackExchange นั้นฉลาดเพราะมัน 'แก้ไข' และเปลี่ยนเส้นทางเบราว์เซอร์เพื่อให้แน่ใจว่าลิงก์ที่ถูกต้องนั้นถูกแสดงและแชร์
ลุค Puplett

"กระสุน" มีประโยชน์น้อยสำหรับคนและมีประโยชน์มากขึ้นสำหรับการเพิ่มประสิทธิภาพกลไกค้นหาเนื่องจาก "กระสุน" หรือ "URL ที่จำง่าย" ควรมีคำหลักที่เกี่ยวข้องกับเนื้อหาของหน้า ผู้ใช้ขั้นสูงไม่ใช่เหตุผลที่จะรวม URL ที่จำง่ายในไซต์ของคุณ การจัดอันดับของเครื่องมือค้นหามักเป็นสาเหตุหลัก
Greg Burghardt

ฉันไม่เห็นด้วย. 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สำหรับกรณีที่เราไม่ต้องการ ID ใน URLหรือไม่ควรเปลี่ยน URL แม้ว่าจะมี ID อยู่ (ดู[1]และ[2] ) แน่นอนในกรณีนี้จะใช้สำหรับการค้นหา ทั้งกระสุนปัจจุบันและ Permalink (กระสุนแรก) จะถูกเก็บไว้ในฐานข้อมูลpermalink

ไม่ว่าจะด้วยวิธีใดคุณต้องเก็บประวัติตัวบุ้งไว้ในฐานข้อมูลซึ่งจะทำให้เกิดปัญหาได้ในไม่ช้า


ป.ล. : ในกรณีที่สองคุณจะต้องมีการกำหนดเส้นทางที่เฉพาะเจาะจงเพื่อให้เครดิตทางสังคม:

  • หากคุณต้องการให้เปลี่ยนเส้นทางผู้ใช้ไปยัง URL ปัจจุบัน (ไม่ใช่ลิงก์)
  • มีลิงก์ถาวรใช้เป็น URL ในปุ่มโซเชียล
  • เปลี่ยนเส้นทางโปรแกรมรวบรวมข้อมูล facebook ไปยังลิงก์ถาวรเสมอ

ดู[1]และ[2]อีกครั้ง


ทำไมมันจะมีปัญหา? ถ้าฉันเก็บ ID และกระสุนเป็นอะไรผู้เข้าชมจะไปที่หน้าจริง มันจะเป็นอันตรายสำหรับ SEO?
Jnanaranjan

คุณหมายถึงการเก็บประวัติตัวทากหรือไม่? คุณจะทำอย่างไรเมื่อมีคนต้องการใช้กระสุนอีกครั้ง? สำหรับรหัสเดียวกันหรืออื่น? คุณออกแบบฐานข้อมูลและ / หรือรหัสอย่างไรเพื่อป้องกันการเปลี่ยนเส้นทางหลายครั้ง คุณต้องการซ่อนการมีอยู่หลังจากการลบและมีการเปลี่ยนเส้นทางเปิดเผยการมีอยู่ก่อนหน้าหรือไม่ ทั้งหมดนี้ไม่ได้เป็นไปไม่ได้ แต่มันทำให้เกิดคำถามทุกประเภทที่ฉันค่อนข้างป้องกันโดยการออกแบบ
แร่

สิ่งที่ฉันอยากจะบอกก็คือถ้ามี ID อยู่ใน URL แล้วไม่ว่าตัวบุ้งนั้นจะเปลี่ยนเส้นทางไปยังหน้าที่ร้องขอ จากนั้นประวัติกระสุนไม่สำคัญ ฉันยอมรับว่ามันเป็นปัญหาสำหรับ Android แม้ว่า
Jnanaranjan

1
อ่าโอเค. นั่นคือสิ่งที่ฉันเพิ่มสถานการณ์ 1 ใช่ไหม หรือคุณหมายถึงอย่างอื่น?
แร่

ใช่. ถูกต้อง.
Jnanaranjan

2

จะเกิดอะไรขึ้นเมื่อเปลี่ยนชื่อเอกสารหรือผลิตภัณฑ์

การตอบสนอง HTTP 301 (ย้ายแล้ว) ถูกออกแบบมาเพื่อจุดประสงค์นี้ หากไคลเอนต์ไปที่ URI เก่าคุณเพียงแค่ส่ง URI ใหม่ให้พวกเขาและพวกเขาสามารถเปลี่ยนเส้นทางไปที่

บิตบานเลื่อนไม่ซ้ำกันและเพิ่งสร้างจากชื่อวิดีโอมันสามารถตรวจสอบได้บน GET ดังนั้นหากเข้าประตูร่อนและไม่ตรงกับสิ่งที่อยู่ใน doc 287171 จริง ๆ แล้วมันจะตอบสนอง 404

หากฉันติดตามอย่างถูกต้องนี่เป็นการทำงานที่ซ้ำซ้อนคุณมีทั้งตัวระบุชื่อสำหรับทรัพยากรและรหัสใน URI เดียวกัน แต่นั่นไม่ได้ตอบสนองวัตถุประสงค์ใด ๆ

หากคุณกังวลเกี่ยวกับภาพยนตร์หลายเรื่องที่มีชื่อเหมือนกันคุณสามารถเพิ่มข้อมูลพิเศษเกี่ยวกับภาพยนตร์ลงใน 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) แต่ระบบของคุณไม่ควรเชื่อถือ ในนั้นและลูกค้าไม่ควรหยุดถ้าคุณเปลี่ยน URIs ของคุณ

หรือจะใช้วิธีอื่นคุณควรจะสามารถเปลี่ยนข้ามคืนได้

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

ไปยัง

http://vidsyeah.com/video/12323

และลูกค้าไม่ควรทำลายเนื่องจากลูกค้าควรดูเนื้อหาไม่ใช่ URL


เช่นเดียวกับคำตอบของ Jon ฉันคิดว่าคุณไม่ได้สวมหมวก UX เมื่อคิดถึงเรื่องนี้ ฉันต้องการเพิ่มความสามารถในการใช้งานของที่อยู่ ดูความคิดเห็นของฉันในคำถาม: "ฉันชอบ URL ที่เป็นมิตรเนื่องจากคุณมีความคิดเกี่ยวกับสิ่งที่อยู่ท้าย URL เมื่อคุณวางหรือดูในอีเมลหรือเอกสารเป็นการดีกว่าสำหรับ SEO หรือเคยเป็นมาก่อน"
Luke Puplett

2
ในการโยน 301 ฉันต้องสามารถค้นหาทรัพยากรที่ถูกต้องได้ดังนั้นฉันจึงต้องมีประวัติ
ลุค Puplett

1
คุณจะต้องมีประวัติ แต่ถ้าคุณมีเว็บไซต์ที่มีทรัพยากรที่เปลี่ยนแปลงซึ่งเป็นความคิดที่ดีอยู่แล้ว
Cormac Mulhall

ไม่มีปัญหากับ URI ที่เป็นมิตร ฉันจะไม่ทำรูปแบบที่ URI สามารถเป็นอะไรก็ได้ แต่ก็ยังใช้งานได้ถ้ามันมี ID ในตอนท้าย แต่นั่นไม่ได้แก้ปัญหาใด ๆ (ผู้ใช้ยังต้องจำ ID) และนำเสนอรูปแบบ URI ที่สับสน (ผู้ใช้อาจถามว่าทำไม URI ที่แตกต่างกันสองอันที่มีข้อผิดพลาดการสะกดไปที่ทรัพยากรเดียวกัน)
Cormac Mulhall

1
หากคุณกังวลเกี่ยวกับการสะกดผิดใน URIs วิธีทั่วไปในการจัดการกับปัญหานี้คือการแนะนำ URIs ในหน้าข้อผิดพลาด 404 สำหรับ URL ที่สะกดผิด คุณสามารถทำการค้นหารูปแบบคำและคืนสิ่งที่คุณคิดว่าผู้ใช้อาจมองหา
Cormac Mulhall

1

บีบีซีใช้ทากที่:

  • ตัวอักษรและตัวเลข (สำหรับความกะทัดรัด)
  • ไม่ซ้ำกัน (สำหรับการค้นหา)
  • ไม่ต่อเนื่อง (เพื่อไม่ให้มีการเพิ่มรายการคำสั่งลงใน db)

เช่นhttp://www.bbc.co.uk/programmes/b006mk7h

แต่ละโปรแกรมสาธารณะมีทั้ง ID และตัวบุ้ง ID สามารถเป็นจำนวนเต็มที่เพิ่มขึ้นอัตโนมัติตามปกติและช่องว่างไม่ปรากฏ


0

จากมุมมอง RESTful URIs ควรทำตามโครงสร้างลำดับชั้นที่คาดการณ์ได้และ perphaps เพื่อเพิ่มความสะดวกในการใช้งาน

สิ่งนี้จะทำให้ผู้ใช้ใช้งานง่ายขึ้น หากข้อมูลของคุณมีความสัมพันธ์ดังนั้นจำเป็นต้องมีลำดับชั้นบางอย่าง

ดูเหมือนว่ารูปแบบคือ: \video\[name]\[id]

หากไม่มีการใช้ชื่อสำหรับการจัดหมวดหมู่ใด ๆ เพิ่มเติมชื่อดังกล่าวอาจถูกคัดออก \video\[id].

อย่างไรก็ตามหากคุณต้องการจัดประเภทวิดีโออาจเป็นชื่อที่มีประโยชน์

ตัวอย่าง:

  • \ วิดีโอ \ SwingingDoors \ 123
  • \ วิดีโอ \ SwingingDoors \ 124
  • \ วิดีโอ \ SlidingDoors \ 125
  • \ วิดีโอ \ SlidingDoors \ 126

มันเป็นการตัดสินใจออกแบบจริงๆว่ารูปแบบการเข้าถึงเป็นอย่างไร


ฉันคิดว่าคุณกำลังคิดเกี่ยวกับสิ่งนี้จาก API / สถาปัตยกรรมข้อมูลไซต์ PoV ฉันต้องการแนะนำส่วน URL ที่เป็นมิตรที่สร้างขึ้นเพื่อช่วยมนุษย์และ SEO เห็นได้ชัดว่านี่เป็นสิ่งที่พบได้ทั่วไปและใช้ชื่อ 'กระสุน' ชื่อไม่ได้ถูกใช้สำหรับการจัดหมวดหมู่และถูกเพิ่ม (ไม่ลบ) เพื่อทำให้ UX ที่ดีขึ้นด้วย URL และเว็บไซต์ / แบรนด์ของเรา
Luke Puplett
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.