2014-10-07 88 views
0

我從客戶端調用WCF REST API調用。爲此,我使用WebChannelFactory<IRestApi>類型的專用對象,其中IRestApi是ServiceContract。在靜態API調用中添加常量參數

然後,我可以通過我使用的通道(由創建)調用IRestApi的方法。

我的問題是:我可以添加常量參數到這個通道(在我的情況下是一個版本號),所以我不必一遍又一遍地在每個調用中傳遞它?

+0

您無法將'Version'屬性添加到'IRestApi'? – DavidG 2014-10-07 11:56:44

+0

@DavidG,我不確定你的意思。 IRestApi是定義客戶端和服務器之間剩餘契約的接口。 IRestApi有很多方法。我可以爲這些方法中的每一個添加一個「版本」參數,但我想也許我有一個更好,更優雅的方式來做到這一點,因爲version屬性是常量(所以我想將它加載到cannel).. – user1028741 2014-10-07 12:03:11

+0

您是否正在通過HTTP訪問API?你可以在那裏添加一個頭文件。 – DavidG 2014-10-07 12:04:55

回答

0

我不確定您的對象/接口是如何組合在一起的,您也不清楚如何將此版本發送到服務器。使用REST API版本的常規方法是將版本放入URI中,有點像example.com/service/v8/...

在這種情況下,也許你可以使用一個裝飾器對象,它可以包裝這個WebChannel(我假設這是你可以調用類似.get("/some/url")的類型)。你的裝飾者將能夠'注入'額外的數據。

你叫decoratedObject.setURLPreFix("/some_serivce/v3"),然後decoratedObject.get("/some/url"),裝飾功能將實施類似...

class WebChannelDecorator{ 
    WebChannel channel; 
    String urlPrefix = ""; 
    WebChannelDecorator(WebChannel c){ 
    channel = c; 
    } 
    /* methods you want to work just the same */ 
    T foo(args){ 
    return channel.foo(args); 
    } 
    /* methods you want to 'decorate' */ 
    T get(String url){ 
    return channel.get(urlPrefix + url); 
    } 
    void setURLPrefix(String prefix){ 
    urlPrefix = prefix; 
    } 
} 

這可能不是真正被稱爲Decorator模式,但這個想法是最重要的,不是你所說的。