2009-06-05 29 views
7

Giả sử chúng ta có một ứng dụng web grails phơi bày nhiều tài nguyên.Ứng dụng grails graful: DRY up up UrlMapping

  • thẻ
  • url
  • người dùng

Ứng dụng này có một giao diện web cổ điển mà người dùng tương tác với và một số chính quyền. Chúng tôi muốn trưng bày các tài nguyên từ ứng dụng cho khách hàng thông qua API RESTful và chúng tôi không muốn phần đó của ứng dụng làm lộn xộn các bộ điều khiển và mã mà chúng tôi đã có. Vì vậy, chúng tôi đã đưa ra những điều sau:

Nếu giao diện web cung cấp host/app_path/url/[list|show|create], chúng tôi muốn REST API ở số /host/app_path/rest/url.

Vì vậy, chúng tôi đã kết thúc với các tập tin UrlMappings sau:

Vấn đề là, rằng đây không phải là chính xác những điều DRY nhất ở đây. Nó trở nên tồi tệ hơn khi chúng tôi thêm nhiều tài nguyên hơn như thẻ. Họ sẽ dịch để thêm một ba khối mã rất giống ...

Các chức năng không crud sẽ có những điều như tìm kiếm với các tiêu chí cụ thể và như vậy ...

Chúng tôi cố gắng tạo ra việc đóng cửa lập bản đồ với một vòng lặp , Nhưng không thành công. Chúng ta hoàn toàn đi sai đường ở đây sao?

Trả lời

7

Tôi muốn giới thiệu các bản đồ sau:

"/rest/url/$id?"(resource:"urlRest") 

Dưới đây là các phương thức HTTP để lập bản đồ hành động rằng điều này sẽ tạo cho urlRestController:

GET   show 
PUT   update 
POST  save 
DELETE  delete 

Tôi thấy lý do tại sao bạn có thể muốn để lập bản đồ/phần còn lại/url POST để lưu và/rest/url/id PUT để cập nhật, nhưng điều đó ngược lại ý nghĩa của những động từ đó. PUT nên là cách duy nhất để thêm url mới và POST là cách duy nhất để cập nhật url. Làm theo cách bạn đã đặt ra sẽ hoạt động và có thể là cách tốt nhất nếu ràng buộc của bạn là giữ mã điều khiển hiện tại của bạn bị ảnh hưởng. Tuy nhiên, tôi đoán là bạn có thể đã được mã hóa để xử lý ánh xạ mặc định tốt (cập nhật/xóa lỗi nếu không có id, hiển thị chuyển hướng đến danh sách nếu không có id, v.v.).

+1

Ahh, điều PUT/POST: D – kungfoo