Dấu gạch nối, dấu gạch dưới hoặc camelCase làm dấu phân cách từ trong URI?


477

Tôi đang thiết kế API dựa trên HTTP cho ứng dụng mạng nội bộ. Tôi nhận ra đó là một mối quan tâm khá nhỏ trong sơ đồ lớn của mọi thứ, nhưng: tôi có nên sử dụng dấu gạch nối, dấu gạch dưới hoặc camelCase để phân định các từ trong URI không?


Đây là những suy nghĩ ban đầu của tôi:

lạc đà

  • vấn đề có thể xảy ra nếu máy chủ không phân biệt chữ hoa chữ thường
  • dường như được sử dụng khá rộng rãi trong các khóa chuỗi truy vấn ( http://api.example.com ? searchQuery = ...), nhưng không phải trong các phần URI khác

Dấu gạch nối

  • thẩm mỹ hơn so với các lựa chọn thay thế khác
  • dường như được sử dụng rộng rãi trong phần đường dẫn của URI
  • không bao giờ thấy khóa chuỗi truy vấn gạch nối trong tự nhiên
  • có thể tốt hơn cho SEO (điều này có thể là một huyền thoại)

Gạch dưới

  • có khả năng dễ dàng hơn để xử lý các ngôn ngữ lập trình
  • một số API phổ biến (Facebook, Netflix, StackExchange, v.v.) đang sử dụng dấu gạch dưới trong tất cả các phần của URI.

Tôi đang nghiêng về phía dưới cho tất cả mọi thứ. Thực tế là hầu hết những người chơi lớn đang sử dụng chúng đều hấp dẫn (xem https://stackoverflow.com/a/608458/360570 ).


Từ mọi thứ tôi đã đọc, bạn nên sử dụng dấu gạch nối , nhưng dấu gạch dưới có vẻ dễ quản lý hơn.
ServAce85

1
Tôi tin rằng các dấu gạch ngang , tại một thời điểm, tốt hơn cho mục đích SEO. Điều này có thể không đúng bây giờ, nhưng rất nhiều người đã chấp nhận nó và nó được chấp nhận rộng rãi hơn như là cách thực hành tốt nhất. Mặt khác, dấu gạch dưới có thể dễ dàng xử lý hơn trong lập trình phụ trợ. Tôi sử dụng PHP, vì vậy việc sử dụng dấu gạch dưới cho tên hàm dễ dàng hơn nhiều so với dấu gạch nối. camelCase có thể dễ thực hiện nhất, nhưng đọc nó thường khó. Cuối cùng, tôi nghĩ bạn đã đúng khi bạn nói rằng bạn không bao giờ nhìn thấy a hyphenated query string in the wild. Đó thường là thời gian cho camelCase.
ServAce85

Theo câu hỏi này, gạch dưới không phải là một lựa chọn hợp lệ: stackoverflow.com/questions/3641722/iêu
wytten


Bạn đề cập đến các API phổ biến, tôi muốn thêm một API: Google. Theo như tôi đã thấy, Google không sử dụng gì cả giữa các từ (ví dụ: kiểm tra API Ma trận Khoảng cách của Google Maps).
nbeuchat

Câu trả lời:


473

Bạn nên sử dụng dấu gạch nối trong URL ứng dụng web có thể thu thập thông tin. Tại sao? Bởi vì dấu gạch nối phân tách các từ (để công cụ tìm kiếm có thể lập chỉ mục các từ riêng lẻ) và không phải là một ký tự từ . Gạch dưới là một ký tự từ, có nghĩa là nó nên được coi là một phần của từ.

Nhấp đúp vào mục này trong Chrome: camelCase
Nhấp đúp vào mục này trong Chrome: under_score
Nhấp đúp vào mục này trong Chrome: gạch nối

Xem cách Chrome (tôi nghe thấy Google cũng tạo ra một công cụ tìm kiếm) chỉ nghĩ một trong số đó là hai từ?

camelCaseunderscorecũng yêu cầu người dùng sử dụng shiftkhóa, trong khi hyphenatedkhông.

Vì vậy, nếu bạn nên sử dụng dấu gạch nối trong ứng dụng web có thể thu thập dữ liệu, tại sao bạn lại bận tâm làm điều gì đó khác biệt trong ứng dụng mạng nội bộ? Một điều ít cần nhớ.


20
Firefox 24 của tôi trên Windows 7 nghĩ rằng 'gạch nối' là hai từ.
Marcel Stor

9
và nó hoạt động tương tự cho 'under_score'.
Marcel Stor

18
bất kỳ quy ước nào cho queryString, chẳng hạn ?event_id=1hoặc ?eventId=1???
dùng2727195

8
@ user2727195 Mặc dù các URL phân biệt chữ hoa chữ thường, cách tốt nhất là sử dụng chữ thường ở bất cứ nơi nào có thể, vì nó loại bỏ khả năng nhầm lẫn.
Nicholas Shanks

7
Câu trả lời tương tác :)
wild_noth

210

Cách thực hành tốt nhất tiêu chuẩn cho API REST là có dấu gạch nối , không phải dấu mũ hoặc dấu gạch dưới.

Điều này xuất phát từ "Quy tắc thiết kế API REST" của Mark Masse từ Oreilly.

Ngoài ra, lưu ý rằng chính Stack Overflow sử dụng dấu gạch nối trong URL: .../hyphen-underscore-or-camelcase-as-word-delimiter-in-uris

WordPress cũng vậy: http://inventwithpython.com/blog/2012/03/18/how-much-math-do-i-need-to-ledge-to-program-not-that-much-act


3
Nếu bạn xem chương về hướng dẫn chuỗi truy vấn trong Quy tắc thiết kế API REST, bạn sẽ nhận thấy các hướng dẫn khác nhau tùy theo phần quy tắc. Không có quy tắc rõ ràng về việc đặt trong chuỗi truy vấn, nhưng bạn sẽ thấy rằng tất cả các ví dụ trong phần trên chuỗi truy vấn có tất cả các khóa đều nằm trong trường hợp lạc đà.
Michael Lang

1
Chỉ FYI - "Quy tắc thiết kế API REST" đã được xuất bản vào tháng 10 năm 2011. Có thể mọi thứ đã thay đổi trong 8 năm qua.
ChrisN

25

Trong khi tôi khuyên bạn nên có dấu gạch nối, tôi cũng phải chủ trương có một câu trả lời không có trong danh sách của bạn:

Không có gì đâu

  • API của công ty tôi có URI như thế /quotationrequests/, /purchaseorders/v.v.
  • Mặc dù bạn nói rằng đó là một ứng dụng mạng nội bộ, bạn đã liệt kê SEO là một lợi ích. Google khớp với mẫu / foobar / trong một URL cho truy vấn?q=foo+bar
  • Tôi thực sự hy vọng bạn không xem xét việc thực hiện cuộc gọi PHP tới bất kỳ chuỗi tùy ý nào mà người dùng chuyển đến thanh địa chỉ, như @ ServAce85 gợi ý!

+1 để chỉ ra một lựa chọn rõ ràng. Nó cũng định hướng / trích dẫn / từ / trích dẫn / yêu cầu /.
Josh Petitt

34
Điều tồi tệ về phản hồi này là, từ góc độ SEO, không có cách nào để một cỗ máy hiểu được một từ kết thúc và một từ khác bắt đầu, vì vậy thông tin này bị mất. Nó cũng khó cho độc giả của con người. Tốt hơn là có một số phân cách cấp từ hơn là không có gì.
Al Sweigart

3
@AlSweigart SEO không liên quan vì đây là một ứng dụng mạng nội bộ đằng sau bức tường đăng nhập.
Nicholas Shanks

2
Tôi đồng ý với @ niel-mcguigan rằng mặc dù đây là một ứng dụng mạng nội bộ, nhưng nếu bạn sử dụng dấu gạch nối ở mọi nơi thì đó là một điều ít cần nhớ.
Drew Goodwin

2
@Drewoodwin Đủ công bằng. Mặc dù lưu ý rằng tôi đã nói "định đề" không phải "khuyến nghị" :-) Và các tên miền thường không có dấu gạch nối trong đó, vì vậy sử dụng chúng trong các đường dẫn là một điều cần nhớ thêm.
Nicholas Shanks

18

Nói chung, nó sẽ không có đủ tác động để lo lắng, đặc biệt vì đây là ứng dụng mạng nội bộ chứ không phải ứng dụng Internet sử dụng chung. Đặc biệt, vì là mạng nội bộ , SEO không phải là vấn đề đáng lo ngại, vì mạng nội bộ của bạn không thể truy cập được vào các công cụ tìm kiếm. (và nếu có, nó không phải là một ứng dụng mạng nội bộ).

Và bất kỳ khung nào đáng giá đều là muối đã có cách mặc định để thực hiện điều này hoặc khá dễ dàng để thay đổi cách xử lý các thành phần URL nhiều từ, vì vậy tôi sẽ không lo lắng về điều đó quá nhiều.

Điều đó nói rằng, đây là cách tôi thấy các tùy chọn khác nhau:

Dấu gạch nối

  • Mối nguy hiểm lớn nhất đối với các dấu gạch nối là cùng một ký tự (thông thường) cũng được sử dụng để trừ và phủ định số (ví dụ: trừ hoặc phủ định ).
  • Hyphens cảm thấy lúng túng trong các thành phần URL. Chúng dường như chỉ có ý nghĩa ở cuối URL để phân tách các từ trong tiêu đề của một bài viết. Hoặc, ví dụ, tiêu đề của câu hỏi Stack Overflow được thêm vào cuối URL cho mục đích rõ ràng về người dùng và SEO.

Gạch dưới

  • Một lần nữa, họ cảm thấy sai trong các thành phần URL. Chúng phá vỡ dòng chảy (và vẻ đẹp / sự đơn giản) của một URL, vì về cơ bản chúng thêm một không gian rõ ràng lớn, nặng nề ở giữa một URL rõ ràng, trôi chảy.
  • Họ có xu hướng pha trộn với gạch chân. Nếu bạn mong muốn người dùng của mình sao chép-dán URL của bạn vào MS Word hoặc các chương trình chỉnh sửa văn bản tương tự khác hoặc bất kỳ nơi nào khác có thể chọn URL và tạo kiểu cho nó bằng một gạch chân (như các liên kết truyền thống ), thì bạn có thể muốn tránh gạch dưới như dấu phân cách từ. Đặc biệt khi được in, một URL được gạch chân có dấu gạch dưới có xu hướng trông giống như nó có khoảng trắng trong đó thay vì dấu gạch dưới.

Lạc đà

  • Cho đến nay, yêu thích của tôi, vì nó làm cho các URL dường như lưu chuyển tốt hơn và không có bất kỳ lỗi nào mà hai tùy chọn trước đó làm.
  • Có thể là một chút khó khăn hơn để đọc cho những người có một thời gian khó phân biệt chữ hoa chữ thường từ-, nhưng điều này không nên được nhiều của một vấn đề trong một URL, vì hầu hết các "chữ" nên thành phần URL và ngăn cách bởi một /anyways . Nếu bạn thấy rằng bạn có một thành phần URL dài hơn 2 "từ", có lẽ bạn nên cố gắng tìm một tên tốt hơn cho khái niệm đó.
  • không phải là một vấn đề có thể với trường hợp nhạy cảm, nhưng hầu hết các nền tảng có thể được điều chỉnh cho cả hai trường hợp nhạy cảm hoặc case-insensitive. Bất kỳ vấn đề nào cũng chỉ thực sự là vấn đề đối với 2 trường hợp: a.) Con người gõ URL và b.) Các lập trình viên (vì chúng ta không phải là con người) gõ URL. Typose luôn là một vấn đề, bất kể độ nhạy của trường hợp, vì vậy đây là không khác nhau mà tất cả một trường hợp.

13
Không đồng ý. Nhìn vào SO, xem tất cả các trang web wordpress, nhìn vào hầu hết các trang web tin tức, tất cả chúng đều sử dụng dấu gạch nối. Ngoài ra trường hợp lạc đà trộn các trường hợp, web nên là tất cả các trường hợp thấp hơn theo ý kiến ​​của tôi.
Fabien Warniez

4
Theo tôi, web thực sự không nhạy cảm. Về quy ước, nếu bạn theo cách tiếp cận tuyến đường RoR (ruby on rails), bạn sẽ sử dụng dấu gạch dưới. Thông thường, tôi làm như vậy để giữ cho nó nhất quán trên các đường ray được tạo và các tuyến đường được đặt tên của tôi. Tuy nhiên, tôi cho rằng đối với tôi dash đọc tốt hơn so với dấu gạch dưới.
rpbaltazar

1
Có lẽ họ có một công cụ tìm kiếm nội bộ trong mạng nội bộ của họ?
Juha Untinen

3
Không đồng ý. Cả hai lập luận của bạn chống lại dấu gạch ngang đều thiếu sót. Không có nguy hiểm về phủ định hoặc phép trừ bởi vì chúng ta đang nói về phần tên của một tuple ở đây, bạn không bao giờ nên hoạt động hoặc đánh giá phần tên của một tuple cho toán học hoặc phủ định. Cũng không có gì khó xử khi sử dụng dấu gạch nối trong URI vì đây là cách thực hành tốt nhất từ ​​lâu được sử dụng bởi một số ít các trang web được thiết lập tốt. Họ cũng không yêu cầu nhấn phím Shift và hầu như mọi người đều coi đó là ranh giới từ.
đôi

2
Theo như tôi có thể nhớ, dấu gạch ngang là tiêu chuẩn được sử dụng nhiều trong URL và chắc chắn được coi là thông lệ tốt nhất trong các tiêu chuẩn ngày nay. Không sử dụng chúng vì cảm thấy khó xử có vẻ khó xử với tôi.
pistol-pete ngày

2

Câu trả lời ngắn:

các từ viết thường có dấu gạch nối làm dấu phân cách

Câu trả lời dài:

Mục đích của một URL là gì?

Nếu chỉ đến một địa chỉ là câu trả lời, thì một URL rút ngắn cũng đang hoạt động tốt. Nếu chúng ta không làm cho nó dễ đọc và bảo trì, nó sẽ không giúp các nhà phát triển và bảo trì như nhau. Họ đại diện cho một thực thể trên máy chủ, vì vậy họ phải được đặt tên một cách logic.

Google khuyên bạn nên sử dụng dấu gạch nối

Xem xét sử dụng dấu câu trong URL của bạn. URL http://www.example.com/green-dress.html hữu ích hơn nhiều đối với chúng tôi so với http://www.example.com/greendress.html . Chúng tôi khuyên bạn nên sử dụng dấu gạch nối (-) thay vì dấu gạch dưới (_) trong URL của mình.

Đến từ một nền tảng lập trình, camelCase là một lựa chọn phổ biến để đặt tên cho các từ chung.

Nhưng RFC 3986 định nghĩa các URL là phân biệt chữ hoa chữ thường cho các phần khác nhau của URL. Vì các URL phân biệt chữ hoa chữ thường, giữ cho khóa thấp (chữ thường) luôn an toàn và được coi là một tiêu chuẩn tốt. Bây giờ có một trường hợp lạc đà ra khỏi cửa sổ.

Nguồn: https://metamug.com/article/rest-api-naming-best-practices.html#word-d Friiter


-1

Đây là điều tốt nhất của cả hai thế giới.

Tôi cũng "thích" nhấn mạnh, bên cạnh tất cả những điểm tích cực của bạn về họ, cũng có một phong cách trường học cũ đối với họ.

Vì vậy, những gì tôi làm là sử dụng dấu gạch dưới và chỉ cần thêm một quy tắc viết lại nhỏ vào tệp .htaccess của Apache của bạn để viết lại tất cả các dấu gạch dưới cho dấu gạch nối.

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

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.