2014-10-07 5 views
0

Я делаю вызовы WCF REST api от клиента. Для этого я использую выделенный объект типа WebChannelFactory<IRestApi>, где IRestApi является ServiceContract.добавить постоянные параметры в rest api calls

Тогда я могу просто вызвать методы IRestApi через канал, который я использую (созданный CreateChannel()).

Мой вопрос: могу ли я добавить постоянный параметр к этому каналу (в моем случае номер версии), поэтому мне не придется передавать его снова и снова в каждом из вызовов?

+0

Вы не можете добавить свойство 'Version' в' IRestApi'? – DavidG

+0

@DavidG, я не уверен, что вы имеете в виду. IRestApi - это интерфейс, определяющий остаточный контракт между клиентом и сервером. IRestApi имеет много методов. Я могу добавить параметр «версия» к каждому из этих методов, но я подумал, что, возможно, у меня есть лучший и более элегантный способ сделать это, потому что свойство version является постоянным (поэтому я хотел бы загрузить его в cannel). . – user1028741

+0

Получаете ли вы доступ к API через HTTP? Вы можете добавить туда заголовок. – DavidG

ответ

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; 
    } 
} 

Это не может на самом деле можно назвать шаблон декоратора, но идея состоит в том, что важно, не то, что вы называете.