Успокоительные веб-сервисы

Мало дополнения. Можно использовать boost::function , для создания функторов из функций и методов, как это:

class Foo
{
public:
    void operator () (int i) { printf("Foo %d", i); }
};
void Bar(int i) { printf("Bar %d", i); }
Foo foo;
boost::function f(foo);//wrap functor
f(1);//prints "Foo 1"
boost::function b(&Bar);//wrap normal function
b(1);//prints "Bar 1"

и можно использовать повышение:: свяжите для добавления состояния к этому функтору

boost::function f1 = boost::bind(foo, 2);
f1();//no more argument, function argument stored in f1
//and this print "Foo 2" (:
//and normal function
boost::function b1 = boost::bind(&Bar, 2);
b1();// print "Bar 2"

и самый полезный с повышением:: свяжите и повысьте:: функция можно создать функтор из метода класса, на самом деле это - делегат:

class SomeClass
{
    std::string state_;
public:
    SomeClass(const char* s) : state_(s) {}

    void method( std::string param )
    {
        std::cout << state_ << param << std::endl;
    }
};
SomeClass *inst = new SomeClass("Hi, i am ");
boost::function< void (std::string) > callback;
callback = boost::bind(&SomeClass::method, inst, _1);//create delegate
//_1 is a placeholder it holds plase for parameter
callback("useless");//prints "Hi, i am useless"

можно создать список или вектор функторов

std::list< boost::function > events;
//add some events
....
//call them
std::for_each(
        events.begin(), events.end(), 
        boost::bind( boost::apply(), _1, e));

существует одна проблема со всем этим материалом, ошибка компилятора обменивается сообщениями, не человекочитаемо:)

6
задан marc_s 29 July 2009 в 20:39
поделиться

5 ответов

Выполните:

  • Создайте свое приложение, управляемое гипертекстом (Гипермедиа как механизм состояния приложения - HATEOAS).
  • Тратьте большую часть своего времени и усилий на определение ресурсов и создание типов мультимедиа для их представления.
  • Думайте обо всем URI как об идентификаторе ресурса и предполагайте, что он изменится в будущем.
  • Предоставьте все варианты для продолжения дальнейшего использования вашего приложения в виде ссылок в вашем представлении.
  • Подумайте о своем приложение в качестве веб-сайта, который будет «сканироваться» или «просматриваться» клиентами.
  • Попробуйте написать клиент для своего API и найдите, где происходит связывание.

Не:

  • Публикуйте шаблоны URI в документации API . Если у вас должны быть шаблоны для параметров запроса, например, убедитесь, что они являются частью вашего определения типа мультимедиа.
  • Думайте о своем приложении как о коллекции URI, на которую воздействуют четыре глагола.
  • Предоставлять клиентам mime-типы, такие как «application / xml» или «application / json».

Чтобы использовать аналогию, ваш API должен работать больше как GPS для ваших клиентов, а не как карта. Вы будете сообщать клиентам только название ближайшей улицы. Но с этого момента они могут делать только то, что ваше приложение говорит, что они могут делать в любой данный момент.

Цель этого стиля - минимизировать связь между вашим приложением и его клиентами. Вся связка должна происходить в вашем определении типа носителя. Это упрощает развитие API и обеспечивает удобный механизм управления версиями. Это также снимает вопросы о таких проблемах, как разбиение на страницы.

Большинство «RESTful» API не следуют этому шаблону. Для того, кто это делает,

8
ответ дан 8 December 2019 в 12:22
поделиться

Воспользуйтесь преимуществами базового протокола, где это возможно. Вместо использования глаголов в полезной нагрузке попробуйте использовать (например) методы HTTP GET, POST, PUT, DELETE. Ваш URI должен описывать ресурс, но не то, что с ним делать.

4
ответ дан 8 December 2019 в 12:22
поделиться

Вот некоторые вещи, которых следует избегать:

  • Игнорирование кеширования
  • Туннелирование всего через GET (или, как вариант, POST)
  • Игнорирование типов MIME

Есть хорошая статья здесь говорится о некоторых антишаблонах REST:

http://www.infoq.com/articles/rest-anti-patterns

3
ответ дан 8 December 2019 в 12:22
поделиться

Вроде широкий вопрос, но я попробую. Во-первых, используйте HTTP-глаголы только так, как они были задуманы. Не отправляйте POST на URL-адрес с аргументом url, который в основном переопределяет POST и превращает его в GET или DELETE. Вот как работает протокол SOAP (все является POST).

2
ответ дан 8 December 2019 в 12:22
поделиться

В этой статье подробно описаны некоторые дизайнерские решения, которые отличают RPC от REST:

http: / /www.pluralsight. com / community / blogs / tewald / archive / 2007/04/28 / 47067.aspx

@ S.Lott: спасибо, я искренне думал, что опубликовал это как ответ, а не комментарий. Я теряю свои шарики.

2
ответ дан 8 December 2019 в 12:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: