2012-06-15 14 views
9

Khi tôi nhận được nhiều hơn vào các API RESTful, sự đơn giản (tốt) của phương pháp này có nghĩa là bạn tạo ra rất nhiều mã soạn sẵn và mã phải khớp với ba hoặc bốn địa điểm khác nhau, ví dụ: cho một chồng Jersey dựa trên:Có cách nào để tạo mã boilerplate cho các ngăn xếp RESTful không?

  1. HTML trên trang web cung cấp các điều khiển (một nút Create Foo)
  2. JS trên trang web mà formulates JSON và yêu cầu để tạo ra một Foo
  3. Một FooRest phương pháp lớp học để xử lý các yêu cầu và tạo ra một Foo
  4. một lớp Foo để nhanh chóng, mà sẽ thao tác các cấu trúc dữ liệu

có các công cụ mà prov ide một điểm bắt đầu cho một số hoặc tất cả các mã này tự động, có thể bắt đầu từ một cái gì đó đơn giản như một cấu trúc dữ liệu JSON? Ví dụ, cung cấp:

card: { 
    methods: [GET], 
} 
handOfCards: { 
    methods: [GET POST PUT DELETE], 
} 

và ít nhất kết thúc với yêu cầu Ajax, các lớp học CardRest và HandOfCardsRest với các phương pháp quy định stubbed ra, và Card và HandOfCards lớp với tài sản hoặc thu khí/setters?

+0

Tôi thực sự hy vọng điều này sẽ là câu trả lời hay. Tôi hoàn toàn có thể sử dụng nó! –

+0

@ W.Goeman, sau đó tốt nhất để chia sẻ câu trả lời để cung cấp cho nó khả năng hiển thị nhiều hơn ... có vẻ như lượt xem đã bị ngừng lại. –

Trả lời

1

Tôi nghĩ rằng gần như bất kỳ ứng dụng * ray làm tất cả những điều này cho bạn. Grails là yêu thích của tôi ngay bây giờ, và một khi bạn nhận được thiết lập ban đầu được thực hiện (một lệnh duy nhất) bạn tạo các lớp miền với một lệnh khác.

Khi đã tạo xong, bạn có thể tạo cả hai chế độ xem (html) và bộ điều khiển để xử lý tất cả các hành động này bằng một lệnh duy nhất và đĩa nồi hơi đủ cho nhiều trang ban đầu.Nó thậm chí sẽ tạo ra các trường hợp thử nghiệm cho bạn, mặc dù bạn sẽ cần phải xác định những gì các thử nghiệm thực tế làm. Bạn có thể lập trình nó theo quy ước rất dễ dàng, hoặc tạo ánh xạ của riêng bạn từ các URL -> các hành động của bộ điều khiển. Nó có một tấn hỗ trợ plugin và dễ dàng xử lý việc gửi các biểu mẫu từ xa (qua javascript) được xây dựng.

Nó không tạo cấu trúc dữ liệu json để tạo, nhưng các tên miền được tạo ra rất dễ dàng (sử dụng groovy) autowires getter/setters, service injections, vv vì nó dựa trên Spring Framework.

+0

Tôi muốn kiểm soát nhiều hơn so với * đường ray đã cho tôi, nhưng tôi đoán điều này vẫn là gần nhất với câu trả lời đúng. : - / –

0

Bạn có thể thử một cách tiếp cận hoàn toàn khác và thử somethink như project lombok. Nó sẽ ít nhất cho phép bạn nix tất cả các getters và setters của bạn.

+0

Đó là một sự khởi đầu, mặc dù thực tế IDE của tôi tự động chèn getters/setters. Nhưng đó là tất cả các chú thích và phương pháp làm tôi lo lắng. Có lẽ tôi sẽ chỉ viết một kịch bản perl. ;) –

+0

Điều này không thực sự trả lời câu hỏi. Điều này hoàn toàn không liên quan gì đến REST, bất kể cái gì. –

3

Bạn đã thử Backbone.js chưa? Nó là một thư viện JavaScript xử lý các yêu cầu REST Ajax cho bạn. Nó cho phép bạn xác định mô hình của mình để bọc dữ liệu và cung cấp các bộ định vị, getters, lưu và xóa các chức năng, v.v.

Nó cũng cho phép bạn liên kết các mô hình với chế độ xem tạo HTML UI.

+0

Hmm, thú vị. Đó chắc chắn là một nửa ở đó. Điều đó cộng với một kịch bản perl nhỏ hơn có thể làm việc. ;) –

+0

Tôi đã không thực sự nhìn vào xương sống trước đây, nhưng có vẻ như đây sẽ là một lối vào tuyệt vời cho một phụ trợ grails, mà tôi đề cập đến trong câu trả lời của tôi dưới đây. – Mike

1

Mục tiêu của bạn có lẽ không phải là tạo mã của bản mẫu nhưng thực sự viết ít mã hơn.

Spark là khung công tác web vi mô Java dựa trên Sinatra.

Dưới đây là một số mã ví dụ:

import static spark.Spark.*; 
import spark.*; 

public class HelloWorld { 
    public static void main(String[] args) { 
     get(new Route("/") { 
      @Override 
      public Object handle(Request request, Response response) { 
       // .. Show something .. 
      } 
     }); 

     post(new Route("/") { 
      @Override 
      public Object handle(Request request, Response response) { 
       // .. Create something .. 
      } 
     }); 

     put(new Route("/") { 
      @Override 
      public Object handle(Request request, Response response) { 
       // .. Update something .. 
      } 
     }); 

     delete(new Route("/") { 
      @Override 
      public Object handle(Request request, Response response) { 
       // .. annihilate something .. 
      } 
     }); 

     options(new Route("/") { 
      @Override 
      public Object handle(Request request, Response response) { 
       // .. appease something .. 
      } 
     }); 
    } 
} 
+0

Bạn có thể giúp tôi hiểu cách điều này giúp xây dựng các mặt trước và mặt sau của khung RESTful không? Tôi đang thiếu một cái gì đó ... –

+0

Nó đơn giản hóa kết thúc trở lại khá một chút. Rails là giải pháp đơn giản và trực tiếp cho vấn đề trước mắt của bạn (ví dụ: 'đường ray tạo giàn giáo '), nhưng bạn cho biết bạn đang sử dụng Jersey hiện tại vì vậy tôi nghĩ bạn có thể thích giải pháp dựa trên Java hơn. Sau khi sử dụng Jersey, tôi hết lòng đề nghị một cái gì đó giống như Spark trên nó. –

1

Một thay thế (hoặc bổ sung) để Juan's answer, bạn có thể muốn kiểm tra Knockback.js, trong đó có sản phẩm tốt nhất của Knockout và cho biết thêm là tốt nhất của Backbone.js. Backbone hỗ trợ RESTful API thông qua chức năng "đồng bộ". Trích dẫn trang web của họ:

Phương pháp chữ ký của Backbone.sync là đồng bộ (phương pháp, mô hình, [tùy chọn])

method – the CRUD method ("create", "read", "update", or "delete") 
model – the model to be saved (or collection to be read) 
options – success and error callbacks, and all other jQuery request options