2015-09-29 31 views
5

Trong .NET, chúng tôi đã có thể phiên bản các API ở cấp phương thức bằng cách chú thích chúng và chỉ sao chép các phương thức khác nhau giữa các phiên bản. Tôi đã chuyển sang một nhóm sản phẩm bằng cách sử dụng Rails và tôi đang cố gắng tìm hiểu xem có điều gì giúp tôi thực hiện điều này trong Rails hay không. Tất cả mọi thứ tôi đã thấy cho đến nay cho thấy không gian tên toàn bộ bộ điều khiển của bạn (s) trong một mô-đun với V1, V2, vv ... khi chúng ta chỉ nói 1 phương pháp khác nhau giữa V1 và V2, cung cấp khả năng giảm đáng kể số lượng trùng lặp cần thiết.Phiên bản API Rails ở cấp Phương thức

Cảm ơn.

Trả lời

3

Ruby là một ngôn ngữ cực kỳ linh hoạt và phong phú và sẽ không khó để tránh trùng lặp mã.

Một cách đơn giản, bẩn và đơn giản để quản lý vấn đề của bạn là định tuyến đến các hành động thích hợp. Trong .NET bạn thực sự định tuyến các yêu cầu bằng cách chú thích phương thức và không sử dụng bất kỳ tính năng ngôn ngữ đặc biệt nào.

# API::V2 implements only special_method 
get '/api/v2/special_method', controller: 'API::V2', action: 'special_method' 

# all other actions from V2 are processed by V1 
mount API::V1 => '/api/v1' 
mount API::V1 => '/api/v2' 

Cách khác, nâng cao hơn là sử dụng mô-đun để thực hiện tác vụ điều khiển (phương pháp mẫu). Sau đó, bạn có thể sử dụng lại cùng một mô-đun trong V2 của API và ghi đè lên các phương thức đó, cần phải thay đổi.

class API::V1 
    # implementaton of API::V1 
    include ImplV1 
end 

class API::V2 
    # all the methods from V1 are available in V2 too 
    include ImplV1 

    # override methods from V1 here 
    include ImplV2 
end 

Cuối cùng, một đơn giản hơn nhiều, nhưng ít linh hoạt, cách là trực tiếp kế thừa V2 từ V1:

class API::V2 < API::V1 
    def special_method 
    # ... 
    end 
end 
+0

Cảm ơn bạn rất nhiều này là tuyệt vời. – fogwolf

Các vấn đề liên quan