2013-06-21 32 views
9

Câu hỏi:Breeze và RESTful WebAPI

giá trị gì không khoe cung cấp khi tôi cần phải thực hiện POST của riêng tôi/PUT/GET điểm cuối mỗi thực thể trong WebAPI?

Bối cảnh:

This có vẻ là một việc thực hiện phổ biến của một bộ điều khiển serverside Breeze:

[BreezeController] 
public class TodosController : ApiController { 

    readonly EFContextProvider<TodosContext> _contextProvider = 
     new EFContextProvider<TodosContext>(); 

    // ~/breeze/todos/Metadata 
    [HttpGet] 
    public string Metadata() { 
     return _contextProvider.Metadata(); 
    } 

    // ~/breeze/todos/Todos 
    // ~/breeze/todos/Todos?$filter=IsArchived eq false&$orderby=CreatedAt 
    [HttpGet] 
    public IQueryable<TodoItem> Todos() { 
     return _contextProvider.Context.Todos; 
    } 

    // ~/breeze/todos/SaveChanges 
    [HttpPost] 
    public SaveResult SaveChanges(JObject saveBundle) { 
     return _contextProvider.SaveChanges(saveBundle); 
    } 

    // other miscellaneous actions of no interest to us here 
} 

Tôi ở giữa xây dựng một API RESTish rằng, đến thời điểm này, có các điểm cuối như:

GET /api/todo/1 
PUT /api/todo 
POST /api/todo 

Có vẻ như Breeze yêu cầu các điểm cuối phải đơn giản hơn nhiều er (cho tốt hơn hoặc tệ hơn) - chỉ là một bó của GETS và một điểm cuối POST SaveChanges. Điều này khiến tôi nghĩ rằng Breeze có thể phát triển nhanh chóng với một ứng dụng web đơn lẻ, thật dễ dàng ... nhưng ngay khi bạn có khách hàng ẩn danh, bạn phải buộc họ vào bất kỳ quy ước giao diện nào bạn đã tạo trong ứng dụng khách của bạn, trong đó có vẻ như để đánh bại mục đích của thiết kế API RESTful. Đây có phải là trường hợp không?

Trả lời

28

Làn gió là, đầu tiên và formost, một khuôn khổ JavaScript phía máy khách. Nếu bạn không sử dụng Breeze trên máy khách, những lợi ích của Breeze.WebApi được giới hạn

  • Tăng cường hỗ trợ truy vấn OData ($ chọn và mở rộng hỗ trợ, mở rộng $ orderby $)
  • Lưu điểm đánh chặn (beforeSaveEntity và beforeSaveEntities sự kiện)
  • Lưu kết quả xử lý (phím thực thể được cập nhật, đồng thời cột)
  • Metadata khai thác và serialization

Như bạn đã đoán, Breeze có một phi khác nhau losophy từ REST về các hoạt động CRUD.

Breeze được thiết kế cho những khách hàng có thể muốn C/U/D nhiều tài nguyên, các loại khác nhau, trong một giao dịch duy nhất. Điều này cho phép người dùng thao tác dữ liệu theo những cách phức tạp mà không cần nhấn máy chủ, sau đó lưu các thay đổi của họ khi họ đã sẵn sàng. Ví dụ: người ta có thể tạo Order mới, di chuyển hai OrderLineItem s từ một Order sang một số khác, xóa một số thứ ba OrderLineItem, sửa đổi số lượng trên số thứ tư và sau đó là SaveChanges(). Breeze thậm chí còn hỗ trợ sử dụng localStorage để làm việc hoàn toàn bị ngắt kết nối khỏi máy chủ. Sau khi kết nối lại, tất cả các thay đổi đều có thể được lưu.

REST được thiết kế để hoạt động trên one resource at a time. Mỗi hoạt động C/U/D phải được thực hiện đối với máy chủ ngay lập tức để mã phản hồi có thể được thực thi. Nó hoạt động tốt cho các ứng dụng có nhu cầu cập nhật đơn giản, nhưng không hoạt động đối với các ứng dụng nhập dữ liệu. Trong khi transactions can be supported in REST, chúng cồng kềnh nhất.

Có nói rằng, API phía máy chủ của bạn không bị giới hạn trong những gì bạn thấy trong ví dụ Todos. Breeze hỗ trợ Named Saves, cho phép bạn có các điểm cuối khác nhau cho các hoạt động khác nhau. Bạn cũng có thể sử dụng Save Interception để đảm bảo rằng gói lưu của bạn chỉ chứa các loại mà nó cần.Và tự nhiên, không có gì ngăn cản bạn hiển thị cả hai API trên máy chủ của bạn và cả hai đều được cung cấp bởi cùng một lớp kiên trì.

Nếu bạn phải quyết định giữa chúng, bạn nên bắt đầu với người dùng của mình. Người dùng thực (không phải nhà phát triển) không quan tâm đến REST, họ quan tâm đến những gì ứng dụng có thể làm. Cuối cùng, REST cung cấp cho ứng dụng của bạn tất cả ngữ nghĩa của HTTP, và Breeze cung cấp cho nó tất cả các ngữ nghĩa của một cơ sở dữ liệu quan hệ hoặc đối tượng. Mà một trong những tiếp xúc với người dùng của bạn nên phụ thuộc vào các trường hợp sử dụng bạn cần phải hỗ trợ.

+0

Câu trả lời rõ ràng trong pha lê! Cảm ơn! – Riscie

+0

Câu trả lời rất hay bằng văn bản và đầy đủ! – user1789573