Как реализовать сервер API REST?

Я студент университета с промежуточным уровнем опыта программирования на С++. Я хотел бы как можно быстрее реализовать простой API на основе REST для моего приложения.

Я просмотрел Casablanca и libWebSockets но примеры, размещенные на их соответствующих сайтах, немного над моей головой. Есть ли библиотека, в которой есть более ориентированные на новички учебные пособия по созданию RESTFUL API Server в С++?

Примечание:. Я знаю, что этот вопрос задавался несколько раз на С#, но ответы более года или двух старых и в основном не нацелены на новичков. Надеюсь, что новый пост даст некоторые свежие ответы!

Ответ 1

Эй, я тоже недавно был не знаком со всей игрой API. Я обнаружил, что развертывание ASP.NET Web API с Visual Studio - отличный способ начать работу. Шаблон, предоставленный VS (я использую 2013), позволяет легко создавать собственные контроллеры.

Если вы посмотрите пару руководств по методам HTTP, вы можете действительно получить зависание своего контроллера (ов) в соответствии с вашими потребностями. Они хорошо отображают операции CRUD, которые, я уверен, вы хотите выполнить.

Вы также сможете найти библиотеку на С++, которая позволит вам вызывать каждый из ваших методов контроллера и передавать/получать сериализованные объекты JSON/XML. Надеюсь, это помогло, удачи!:)

Ответ 2

Restbed предлагает асинхронные возможности клиент/сервер через ASIO и С++ 11. У нас есть много примеры, и документация будет доступна в ближайшее время тем, кто не любит читать файлы заголовков.

#include <memory>
#include <cstdlib>
#include <restbed>

using namespace std;
using namespace restbed;

void post_method_handler( const shared_ptr< Session > session )
{
    const auto request = session->get_request( );

    int content_length = 0;
    request->get_header( "Content-Length", content_length );

    session->fetch( content_length, [ ]( const shared_ptr< Session > session, const Bytes & body )
    {
        fprintf( stdout, "%.*s\n", ( int ) body.size( ), body.data( ) );
        session->close( OK, "Hello, World!", { { "Content-Length", "13" } } );
    } );
}

int main( const int, const char** )
{
    auto resource = make_shared< Resource >( );
    resource->set_path( "/resource" );
    resource->set_method_handler( "POST", post_method_handler );

    auto settings = make_shared< Settings >( );
    settings->set_port( 1984 );
    settings->set_default_header( "Connection", "close" );

    Service service;
    service.publish( resource );
    service.start( settings );

    return EXIT_SUCCESS;
}

Следующая важная функция позволит возможность зависимости внедрять прикладные уровни.

auto settings = make_shared< Settings >( );

Service service;
service.add_application_layer( http_10_instance );
service.add_application_layer( http_11_instance );
service.add_application_layer( http2_instance );
service.add_application_layer( spdy_instance );
service.start( settings );

Ответ 3

ngrest - простая структура REST с epoll, codegeneration, инструментом командной строки, расширениями и другим сахаром.

Он прост в использовании и подходит для новичков; написанный на С++ 11 и использующий CMake для сборки.

Ответ 4

http://pistache.io/ выглядит хорошо и современно для меня. Всемирный мир приветствует всего 9 строк.

Ответ 5

Я не знаю о каких-либо популярных системах c/С++ rest, чтобы легко достичь этого.

в целом, RESTful-фреймворки более популярны для языков более высокого уровня, таких как java/.NET/javascript/python/etc...

реализация интерфейса RESTful без рамки возможна, но это действительно не идеально.