Лучший внешний шаблон доступа REST API? - PullRequest
3 голосов
/ 09 апреля 2009

Я работаю над парой проектов, которые связаны с внешними сервисами, такими как Facebook и Netflix. На данный момент большинство библиотек, которые я использую для доступа к этим API (включая те, которые я написал сам), имеют отдельные методы, поэтому вызывают специфические функции API, но при этом всегда кажется, что они вызывают какой-то базовый метод для выполнения запроса. Примерно так:

public class ExternalApi
{
    public string SendMessage( criteria )
    {
         //do something unique to this method with criteria like
         //like generating an xml statement or fql query

         return SendRestRequest( modifiedCriteria );
    }

    public string GetData( criteria )
    {
         //do something unique to this method with criteria like
         //like generating an xml statement or fql query

         return SendRestRequest( modifiedCriteria );
    }

    public string SendRestRequest( modifiedCriteria )
    {
         //add global things to modifiedCriteria like authentication bits
         //or wrapping the criteria in some xml or json shell

        var request = new HttpRequest();
        //make the request, return data
    }
}

Итак, мой вопрос, есть ли лучший образец или принцип OO, чтобы использовать его здесь, чтобы в каждом отдельном методе вызова API я не вызывал явно базовый метод каждый раз?

Является ли то, что я ищу, каким-то шаблоном перехвата вызовов, таким как среда ASP.NET MVC и ActionResults?

Редактировать 1: Я не собираюсь использовать функции любого другого сервиса или библиотеки, например, Wcf. Для этих проектов я использую только 1-5% этих возможностей API и предпочитаю использовать для этих целей свой собственный код.

Ответы [ 2 ]

4 голосов
/ 09 апреля 2009

Вот хороший образец:

REST и POX на MSDN

Также взгляните на Предварительный просмотр стартового комплекта WCF 2 на CodePlex, там должны быть примеры кодирования, связанные с клиентом REST

А здесь: REST в Windows Communication Foundation (WCF)

Это также может быть полезно: Примеры клиентских библиотек для API REST

0 голосов
/ 10 апреля 2009

Мне пришлось собрать REST Client для одного из моих дипломных заданий. Я использовал многоуровневый подход и попытался применить рисунок фасада для абстрагирования деталей

interface HTTPRequest{
  public void get();
  public void post();
  public void put();
  public void delete();
}

HTTPRequest предоставил базовую функциональность HTTP, затем я создал RestClient

interface RestClient{
  public void create();
  public void read();
  public void update();
  public void delete();
}

Это дало мне более CRUD-подобный интерфейс. Затем я создал базовый класс RestClient, который можно разделить на подклассы для добавления пользовательских функций. Каждая функция имела соответствующую функцию обратного вызова, которую она вызывала до того, как вернула свои данные вызывающей стороне. Это было названо что-то вроде «createResultProcessor», это может быть переписано в подклассе RestClient, чтобы обеспечить анализ пользовательских результатов и т. Д.

Никогда не думал, что скажу это, потому что я создал достаточно UML-диаграмм на всю жизнь, но SO действительно может сделать это с некоторыми UML-диаграммами!

...