ขีดกลางขีดเส้นใต้หรือ camelCase เป็นตัวคั่นคำใน URIs


476

ฉันกำลังออกแบบ API บน HTTP สำหรับแอปอินทราเน็ต ฉันรู้ว่ามันเป็นข้อกังวลเล็ก ๆ น้อย ๆ ในรูปแบบที่ยิ่งใหญ่ของสิ่งต่าง ๆ แต่: ฉันควรใช้ยัติภังค์, ขีดล่าง, หรือ camelCase เพื่อคั่นคำใน URIs หรือไม่?


นี่คือความคิดเริ่มต้นของฉัน:

CamelCase

  • ปัญหาที่เป็นไปได้หากเซิร์ฟเวอร์ไม่คำนึงถึงขนาดตัวพิมพ์
  • ดูเหมือนว่าจะมีการใช้งานอย่างแพร่หลายในคีย์สตริงข้อความค้นหา ( http://api.example.com ? searchQuery = ... ) แต่ไม่ใช่ในส่วนอื่น ๆ ของ URI

ยัติภังค์

  • ชื่นชอบสุนทรียภาพมากกว่าทางเลือกอื่น
  • ดูเหมือนว่าจะใช้กันอย่างแพร่หลายในส่วนของเส้นทางของ URI
  • ไม่เคยเห็นคีย์สตริงข้อความค้นหาที่มีการใส่ยัติภังค์ในป่า
  • อาจดีกว่าสำหรับ SEO (นี่อาจเป็นตำนาน)

ขีด

  • อาจง่ายกว่าสำหรับภาษาโปรแกรมที่จะจัดการ
  • API ยอดนิยมหลายแห่ง (Facebook, Netflix, StackExchange ฯลฯ ) กำลังใช้ขีดเส้นใต้ในทุกส่วนของ URI

ฉันเอนตัวไปที่ขีดเส้นใต้เพื่อทุกสิ่ง ความจริงที่ว่าผู้เล่นรายใหญ่ส่วนใหญ่ใช้งานพวกเขานั้นน่าสนใจ (ดูhttps://stackoverflow.com/a/608458/360570 )


จากทุกสิ่งที่ฉันอ่านคุณควรใช้ยัติภังค์แต่ขีดล่าง ดูเหมือนจะจัดการได้ง่ายกว่า
ServAce85

1
ฉันเชื่อว่าเครื่องหมายยัติภังค์จะดีกว่าสำหรับวัตถุประสงค์ SEO สิ่งนี้อาจไม่เป็นจริงในขณะนี้ แต่มีคนจำนวนมากยอมรับว่าเป็นวิธีที่ดีที่สุด ขีดล่างในทางกลับกันอาจจะง่ายต่อการจัดการกับในการเขียนโปรแกรมแบ็กเอนด์ ฉันใช้ PHP ดังนั้นจึงเป็นการง่ายกว่าที่จะใช้เครื่องหมายขีดล่างสำหรับชื่อฟังก์ชันมากกว่าเครื่องหมายขีดคั่น camelCaseอาจเป็นวิธีที่ง่ายที่สุดในการติดตั้ง แต่การอ่านมันมักจะยาก hyphenated query string in the wildสุดท้ายผมคิดว่าคุณมีสิทธิ์เมื่อคุณบอกว่าคุณไม่เคยเห็น โดยทั่วไปนั่นเป็นเวลาสำหรับ camelCase
ServAce85

ตามคำถามนี้ขีดล่างไม่ใช่ตัวเลือกที่ถูกต้อง: stackoverflow.com/questions/3641722/…
wytten


คุณพูดถึง API ยอดนิยมฉันต้องการเพิ่ม: Google เท่าที่ฉันเห็น Google ไม่ใช้อะไรเลยระหว่างคำ (ตรวจสอบตัวอย่างเช่น Google Maps Distance Matrix API)
nbeuchat

คำตอบ:


473

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

ดับเบิ้ลคลิกที่นี่ใน Chrome: camelCase
ดับเบิลคลิกที่นี่ใน Chrome: under_score
ดับเบิลคลิกที่นี่ใน Chrome: ยัติภังค์

มาดูกันว่า Chrome (ฉันได้ยินว่า Google สร้างเครื่องมือค้นหาด้วย) คิดเพียงหนึ่งในสองคำนี้หรือไม่

camelCaseและunderscoreยังต้องการให้ผู้ใช้ใช้shiftกุญแจในขณะที่hyphenatedไม่

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


20
Firefox 24 ของฉันบน Windows 7 คิดว่า 'เครื่องหมายขีดคั่น' เป็นสองคำ
Marcel Stör

9
และจะทำงานเหมือนกันสำหรับ 'under_score'
Marcel Stör

18
การประชุมใด ๆ สำหรับ queryString เช่น?event_id=1หรือ?eventId=1???
2727195

8
@ user2727195 แม้ว่า URL จะคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่วิธีปฏิบัติที่ดีที่สุดคือใช้ตัวพิมพ์เล็กทุกที่ที่เป็นไปได้เนื่องจากจะลบโอกาสที่จะพิมพ์ผิด
Nicholas Shanks

7
คำตอบแบบโต้ตอบ :)
wild_nothing

210

แนวปฏิบัติที่ดีที่สุดมาตรฐานสำหรับ REST API คือการมียัติภังค์ไม่ใช่อูฐหรือขีดล่าง

สิ่งนี้มาจาก "REST API Design Rulebook" ของ Mark Masse จาก Oreilly

นอกจากนี้โปรดทราบว่า Stack Overflow เองใช้เครื่องหมายขีดคั่นใน URL: .../hyphen-underscore-or-camelcase-as-word-delimiter-in-uris

เช่นเดียวกับ WordPress: http://inventwithpython.com/blog/2012/03/18/how-much-math-do-i-need-to-know-to-program-not-that-much-actually


3
หากคุณดูที่บทเกี่ยวกับหลักเกณฑ์สตริงข้อความค้นหาใน REST API Design Rulebook คุณจะสังเกตเห็นว่าแนวทางนั้นแตกต่างกันไปตามส่วนของกฎ ไม่มีกฎที่ชัดเจนเกี่ยวกับการใส่ปลอกในสตริงการสืบค้น แต่คุณจะพบว่าตัวอย่างทั้งหมดในส่วนของสตริงการสืบค้นที่คีย์ทั้งหมดอยู่ในกรณีอูฐ
Michael Lang

1
เพียงแค่ FYI - "REST API Design Rulebook" ถูกตีพิมพ์ในเดือนตุลาคม 2554 เป็นไปได้ว่าสิ่งต่างๆมีการเปลี่ยนแปลงในช่วง 8 ปีที่ผ่านมา
ChrisN

25

ในขณะที่ฉันแนะนำยัติภังค์ฉันจะยืนยันคำตอบที่ไม่อยู่ในรายการของคุณด้วย:

ไม่มีอะไรทั้งนั้น

  • API บริษัท ของฉันได้ URI ที่ชอบ/quotationrequests/,/purchaseorders/และอื่น ๆ
  • แม้คุณจะพูดว่าเป็นแอปอินทราเน็ต แต่คุณระบุว่า SEO เป็นประโยชน์ Google จับคู่รูปแบบ / foobar / ใน URL สำหรับข้อความค้นหา?q=foo+bar
  • ฉันจริงๆหวังว่าคุณจะไม่ได้พิจารณาการดำเนินการเรียก PHP กับสตริงใด ๆ โดยพลผู้ใช้ผ่านไปในแถบที่อยู่เป็น @ ServAce85 แสดงให้เห็น!

+1 สำหรับการชี้ให้เห็นตัวเลือกที่ชัดเจน นอกจากนี้ยังลดความซับซ้อน / ขอใบเสนอราคา / จาก / ใบเสนอราคา / คำขอ /
Josh Petitt

34
สิ่งที่ไม่ดีเกี่ยวกับการตอบสนองนี้คือจากมุมมองของ SEO ไม่มีวิธีที่เครื่องจะเข้าใจว่าคำใดคำหนึ่งจบลงและอีกคำหนึ่งเริ่มขึ้นดังนั้นข้อมูลนี้จะหายไป นอกจากนี้ยังเป็นเรื่องยากสำหรับผู้อ่านที่เป็นมนุษย์เช่นกัน มันจะดีกว่าถ้ามีตัวคั่นระดับคำมากกว่าอะไร
Al Sweigart

3
@AlSweigart SEO ไม่เกี่ยวข้องเนื่องจากเป็นแอปพลิเคชันอินทราเน็ตที่อยู่เบื้องหลังกำแพงเข้าสู่ระบบ
Nicholas Shanks

2
ฉันเห็นด้วยกับ @ niel-mcguigan ว่าแม้ว่านี่จะเป็นแอปอินทราเน็ต แต่ถ้าคุณใช้เครื่องหมายขีดคั่นในทุกที่มันเป็นเรื่องที่จำได้ยากน้อยกว่า
Drew Goodwin

2
@DrewGoodwin ยุติธรรมเพียงพอ แม้ว่าโปรดทราบว่าฉันพูดว่า "ยืนยัน" ไม่ใช่ "แนะนำ" :-) และโดเมนมักไม่มีเครื่องหมายขีดคั่นในพวกเขาดังนั้นการใช้พวกเขาในเส้นทางจึงเป็นอีกสิ่งหนึ่งที่ต้องจดจำ
Nicholas Shanks

18

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

และกรอบใด ๆ ที่มีค่าเป็นเกลือก็มีวิธีเริ่มต้นอยู่แล้วหรือค่อนข้างง่ายที่จะเปลี่ยนวิธีจัดการกับส่วนประกอบ URL หลายคำดังนั้นฉันจะไม่กังวลกับมันมากเกินไป

ที่กล่าวว่านี่คือวิธีที่ฉันเห็นตัวเลือกต่าง ๆ :

ยัติภังค์

  • อันตรายที่ใหญ่ที่สุดสำหรับยัติภังค์คือตัวละครเดียวกัน (โดยทั่วไป) ใช้สำหรับการลบและการปฏิเสธเชิงตัวเลข (เช่นลบหรือลบ )
  • ยัติภังค์รู้สึกอึดอัดใจในส่วนประกอบ URL ดูเหมือนว่าเหมาะสมที่สุดเมื่อสิ้นสุด URL เพื่อแยกคำในชื่อเรื่องของบทความ หรือตัวอย่างเช่นชื่อของคำถาม Stack Overflow ที่เพิ่มไว้ท้าย URL สำหรับ SEO และเพื่อความชัดเจนของผู้ใช้

ขีด

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

CamelCase

  • จนถึงตอนนี้ที่ฉันชอบเพราะมันทำให้ URL ดูเหมือนไหลลื่นขึ้นและไม่มีข้อผิดพลาดใด ๆ ที่สองตัวเลือกก่อนหน้าทำ
  • สามารถเล็กน้อยยากที่จะอ่านสำหรับคนที่มีช่วงเวลาที่ยากแตกต่างบนกรณีจากกรณีที่ต่ำกว่า แต่ไม่ควรมากปัญหาใน URL ที่เพราะส่วนใหญ่ "คำว่า" ควรจะเป็นส่วนประกอบ URL และคั่นด้วย/นะ . หากคุณพบว่าคุณมีส่วนประกอบ URL ที่มีความยาวมากกว่า "คำ" 2 ตัวคุณอาจลองค้นหาชื่อที่ดีกว่าสำหรับแนวคิดนั้น
  • มันจะมีปัญหาที่เป็นไปได้ที่มีความไวกรณี แต่แพลตฟอร์มส่วนใหญ่สามารถปรับได้ทั้งกรณีที่สำคัญหรือกรณีตาย สิ่งใด ๆ ที่เป็นปัญหาจริงๆสำหรับ 2 กรณี: ก.) มนุษย์พิมพ์ URL ในและ b.) โปรแกรมเมอร์ (เนื่องจากเราไม่ใช่มนุษย์) พิมพ์ URL ระบบ Typos มักจะมีปัญหาเสมอไม่แตกต่างกันทุกกรณี

13
ไม่เห็นด้วย ดูดังนั้นดูไซต์เวิร์ดเพรสทั้งหมดดูไซต์ข่าวส่วนใหญ่พวกเขาใช้ยัติภังค์ นอกจากนี้กรณีอูฐผสมกรณีเว็บควรเป็นกรณีที่ต่ำกว่าในความคิดของฉัน
Fabien Warniez

4
ในความคิดของฉันเว็บควรเป็นแบบตัวพิมพ์เล็กและใหญ่ เกี่ยวกับอนุสัญญาหากคุณปฏิบัติตามแนวทางเส้นทาง RoR (ruby on rails) คุณจะใช้ขีดล่าง โดยปกติฉันทำเพื่อให้สอดคล้องกับเส้นทางที่สร้างทางรถไฟและเส้นทางที่มีชื่อของฉัน อย่างไรก็ตามฉันคิดว่าสำหรับฉันรีบอ่านดีกว่าขีด
rpbaltazar

1
บางทีพวกเขาอาจมีเครื่องมือค้นหาภายในอินทราเน็ตของพวกเขา
Juha Untinen

3
ไม่เห็นด้วย ข้อโต้แย้งของคุณกับยัติภังค์ทั้งสองนั้นมีข้อบกพร่อง ไม่มีอันตรายเกี่ยวกับการปฏิเสธหรือการลบเพราะเรากำลังพูดถึงส่วนชื่อของ tuple ที่นี่คุณไม่ควรทำงานหรือประเมินชื่อส่วนของ tuple สำหรับคณิตศาสตร์หรือการปฏิเสธ นอกจากนี้ยังไม่มีอะไรน่าแปลกใจเกี่ยวกับการใช้ยัติภังค์ใน URIs เนื่องจากเป็นวิธีปฏิบัติที่ดีที่สุดในการใช้งานเว็บไซต์ที่มีชื่อเสียงมายาวนาน พวกเขายังไม่จำเป็นต้องกดปุ่ม Shift และถือเป็นขอบเขตของคำโดยแทบทุกคน
tpartee

2
เท่าที่ผมจำได้ว่ายัติภังค์นั้นเป็นบรรทัดฐานที่ใช้กันอย่างแพร่หลายใน URL และถือว่าเป็นแนวปฏิบัติที่ดีที่สุดในมาตรฐานปัจจุบัน ไม่ได้ใช้เพราะรู้สึกอึดอัดใจดูเหมือนจะทำให้ฉันอึดอัดใจ
ปืนพก -pete

2

คำตอบสั้น ๆ :

คำที่ต่ำกว่าใส่เครื่องหมายยัติภังค์เป็นตัวคั่น

คำตอบยาว:

จุดประสงค์ของ URL คืออะไร

หากการชี้ไปยังที่อยู่เป็นคำตอบแสดงว่า URL ที่สั้นลงก็ทำงานได้ดีเช่นกัน ถ้าเราไม่ทำให้ง่ายต่อการอ่านและบำรุงรักษามันจะไม่ช่วยนักพัฒนาและผู้ดูแลรักษาเหมือนกัน ซึ่งแสดงถึงเอนทิตีบนเซิร์ฟเวอร์ดังนั้นจึงต้องตั้งชื่อตามหลักเหตุผล

Google แนะนำให้ใช้เครื่องหมายยัติภังค์

พิจารณาใช้เครื่องหมายวรรคตอนใน URL ของคุณ URL ที่http://www.example.com/green-dress.htmlเป็นประโยชน์มากขึ้นกับเรามากกว่าhttp://www.example.com/greendress.html เราขอแนะนำให้คุณใช้เครื่องหมายขีดคั่น (-) แทนขีดล่าง (_) ใน URL ของคุณ

มาจากพื้นหลังการเขียนโปรแกรม camelCase เป็นตัวเลือกยอดนิยมสำหรับการตั้งชื่อคำศัพท์

แต่RFC 3986กำหนด URL เป็นแบบตรงตามตัวอักษรสำหรับส่วนต่างๆของ URL เนื่องจาก URL คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่การทำให้คีย์ต่ำ (ตัวพิมพ์เล็ก) จึงปลอดภัยเสมอและถือว่าเป็นมาตรฐานที่ดี ตอนนี้จะนำกล่องอูฐออกไปนอกหน้าต่าง

ที่มา: https://metamug.com/article/rest-api-naming-best-practices.html#word-delimiters


-1

นี่คือสิ่งที่ดีที่สุดของทั้งสองโลก

นอกจากนี้ฉัน "ชอบ" ขีดเส้นใต้นอกจากคะแนนเชิงบวกของคุณเกี่ยวกับพวกเขาแล้วยังมีรูปแบบโรงเรียนเก่าแก่พวกเขา

ดังนั้นสิ่งที่ฉันทำคือใช้ขีดเส้นใต้และเพียงเพิ่มกฎการเขียนใหม่เล็ก ๆ ลงในไฟล์. htaccess ของ Apache เพื่อเขียนขีดล่างทั้งหมดลงในเครื่องหมายยัติภังค์

https://yoast.com/apache-rewrite-dash-underscore/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.