Nói một cách đơn giản, bạn đang làm điều này hoàn toàn lạc hậu.
Bạn không nên tiếp cận điều này từ những URL bạn nên sử dụng. Các URL sẽ thực sự "miễn phí" một khi bạn đã quyết định tài nguyên nào là cần thiết cho hệ thống của mình VÀ cách bạn sẽ đại diện cho các tài nguyên đó và các tương tác giữa tài nguyên và trạng thái ứng dụng.
Để trích dẫn Roy Fielding
API REST nên dành hầu hết tất cả nỗ lực mô tả của nó để xác định (các) loại phương tiện được sử dụng để thể hiện tài nguyên và trạng thái ứng dụng lái xe hoặc trong việc xác định tên quan hệ mở rộng và / hoặc đánh dấu siêu văn bản cho các loại phương tiện tiêu chuẩn hiện có. Bất kỳ nỗ lực nào dành cho việc mô tả các phương pháp sử dụng cho URI quan tâm nào đều phải được xác định hoàn toàn trong phạm vi quy tắc xử lý cho loại phương tiện (và, trong hầu hết các trường hợp, đã được xác định bởi các loại phương tiện hiện có). [Thất bại ở đây ngụ ý rằng thông tin ngoài băng tần đang thúc đẩy sự tương tác thay vì siêu văn bản.]
Mọi người luôn bắt đầu với các URI và nghĩ rằng đây là giải pháp và sau đó họ có xu hướng bỏ lỡ một khái niệm quan trọng trong kiến trúc REST, đáng chú ý, như được trích dẫn ở trên, "Thất bại ở đây ngụ ý rằng thông tin ngoài băng là điều khiển tương tác thay vì siêu văn bản. "
Thành thật mà nói, nhiều người nhìn thấy một loạt các URI và một số GET và PUT và POST và nghĩ rằng REST là dễ dàng. REST không dễ. RPC qua HTTP rất dễ dàng, việc di chuyển các đốm dữ liệu qua lại được ủy quyền thông qua tải trọng HTTP rất dễ dàng. REST, tuy nhiên, vượt xa điều đó. REST là giao thức bất khả tri. HTTP chỉ rất phổ biến và thích hợp cho các hệ thống REST.
REST sống trong các loại phương tiện, định nghĩa của chúng và cách ứng dụng điều khiển các hành động có sẵn cho các tài nguyên đó thông qua siêu văn bản (liên kết, một cách hiệu quả).
Có nhiều cách nhìn khác nhau về các loại phương tiện trong các hệ thống REST. Một số ủng hộ tải trọng cụ thể của ứng dụng, trong khi những người khác thích nâng cao các loại phương tiện hiện có vào các vai trò phù hợp với ứng dụng. Ví dụ, một mặt bạn có các lược đồ XML cụ thể được thiết kế phù hợp với ứng dụng của bạn so với sử dụng thứ gì đó như XHTML làm đại diện của bạn, có lẽ thông qua các vi định dạng và các cơ chế khác.
Cả hai cách tiếp cận đều có vị trí của chúng, tôi nghĩ, XHTML hoạt động rất tốt trong các tình huống chồng lấp cả web điều khiển bằng máy và điều khiển máy, trong khi các loại dữ liệu trước đây, cụ thể hơn tôi cảm thấy tốt hơn khi máy tương tác với máy. Tôi thấy việc nâng cao các định dạng hàng hóa có thể khiến việc đàm phán nội dung trở nên khó khăn. "application / xml + yourresource" là một loại phương tiện cụ thể hơn nhiều so với "application / xhtml + xml", vì cái sau có thể áp dụng cho nhiều tải trọng có thể hoặc không phải là thứ mà máy khách thực sự quan tâm, cũng không thể xác định mà không cần hướng nội.
Tuy nhiên, XHTML hoạt động rất tốt (rõ ràng) trong web của con người nơi trình duyệt web và kết xuất đồ họa rất quan trọng.
Ứng dụng của bạn sẽ hướng dẫn bạn trong những loại quyết định.
Một phần của quá trình thiết kế hệ thống REST là khám phá các tài nguyên hạng nhất trong hệ thống của bạn, cùng với các tài nguyên hỗ trợ phái sinh, cần thiết để hỗ trợ các hoạt động trên các tài nguyên chính. Khi các tài nguyên được phát hiện, thì việc biểu diễn các tài nguyên đó, cũng như các sơ đồ trạng thái hiển thị luồng tài nguyên qua siêu văn bản trong các biểu diễn vì thách thức tiếp theo.
Hãy nhớ lại rằng mỗi đại diện của một tài nguyên, trong một hệ thống siêu văn bản, kết hợp cả biểu diễn tài nguyên thực tế cùng với các chuyển đổi trạng thái có sẵn cho tài nguyên. Xem xét mỗi tài nguyên một nút trong biểu đồ, với các liên kết là các đường rời nút đó sang các trạng thái khác. Các liên kết này thông báo cho khách hàng không chỉ những gì có thể được thực hiện, mà cả những gì cần thiết cho họ phải được thực hiện (vì một liên kết tốt kết hợp URI và loại phương tiện cần thiết).
Ví dụ: bạn có thể có:
<link href="http://example.com/users" rel="users" type="application/xml+usercollection"/>
<link href="http://example.com/users?search" rel="search" type="application/xml+usersearchcriteria"/>
Tài liệu của bạn sẽ nói về trường rel có tên "người dùng" và loại phương tiện "application / xml + youruser".
Các liên kết này có vẻ dư thừa, tất cả chúng đều nói về cùng một URI, khá nhiều. Nhưng họ không phải.
Điều này là do đối với mối quan hệ "người dùng", liên kết đó đang nói về bộ sưu tập người dùng và bạn có thể sử dụng giao diện thống nhất để làm việc với bộ sưu tập (GET để lấy tất cả chúng, XÓA để xóa tất cả chúng, v.v.)
Nếu bạn POST vào URL này, bạn sẽ cần chuyển tài liệu "application / xml + usercollection", có thể sẽ chỉ chứa một cá thể người dùng trong tài liệu để bạn có thể thêm người dùng, hoặc có thể, để thêm một số tại Một lần. Có lẽ tài liệu của bạn sẽ gợi ý rằng bạn chỉ cần vượt qua một loại người dùng, thay vì bộ sưu tập.
Bạn có thể xem những gì ứng dụng yêu cầu để thực hiện tìm kiếm, như được xác định bởi liên kết "tìm kiếm" và đó là mediatype. Tài liệu về loại phương tiện tìm kiếm sẽ cho bạn biết cách thức này hoạt động và những gì được mong đợi là kết quả.
Mặc dù vậy, điều đáng nói ở đây là bản thân các URI không quan trọng. Ứng dụng này kiểm soát các URI, không phải máy khách. Ngoài một vài 'điểm vào', khách hàng của bạn nên dựa vào các URI do ứng dụng cung cấp cho công việc của mình.
Khách hàng cần biết cách thao tác và giải thích các loại phương tiện, nhưng không cần quan tâm nhiều đến việc nó đi đâu.
Hai liên kết này giống hệt nhau về mặt ngữ nghĩa trong mắt khách hàng:
<link href="http://example.com/users?search" rel="search" type="application/xml+usersearchcriteria"/>
<link href="http://example.com/AW163FH87SGV" rel="search" type="application/xml+usersearchcriteria"/>
Vì vậy, tập trung vào tài nguyên của bạn. Tập trung vào chuyển đổi trạng thái của họ trong ứng dụng và cách đạt được điều đó tốt nhất.