QRestAccessManager Class

QRestAccessManagerは、QNetworkAccessManager の便利なラッパーです。詳細...

Header: #include <QRestAccessManager>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
Since: Qt 6.7
Inherits: QObject

注意:このクラスの関数はすべてリエントラントです。

パブリック関数

QRestAccessManager(QNetworkAccessManager *manager, QObject *parent = nullptr)
virtual ~QRestAccessManager() override
QNetworkReply *deleteResource(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *get(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *get(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *get(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *get(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *head(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkAccessManager *networkAccessManager() const
QNetworkReply *patch(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *patch(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *patch(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *patch(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *post(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *post(const QNetworkRequest &request, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *post(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *post(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *post(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *put(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *put(const QNetworkRequest &request, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *put(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *put(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *put(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

詳細説明

QRestAccessManagerは、QNetworkAccessManager 上の便利なラッパーです。 典型的なRESTfulクライアントアプリケーションに有用なデータ型とHTTPメソッドを修正します。

ラップされたQNetworkAccessManager を直接設定することで、通常の Qt ネットワーク機能にアクセスできます。QRestAccessManager はラップされたQNetworkAccessManager の所有権を取りません。

QRestAccessManagerと関連するQRestReply クラスは、そのスレッド内でのみ使用できます。詳細はQObject thread affinity を参照してください。

ネットワーク・リクエストの発行と応答の処理

ネットワーク・リクエストは、get()post() など、目的の HTTP メソッドに対応する関数呼び出しで開始されます。

シグナルとスロットの使用

この関数はQNetworkReply* オブジェクトを返し、そのシグナルは伝統的な Qt-signals-and-slots の方法でリクエストの完了をフォローアップするために使用できます。

以下は GET リクエストを送信し、レスポンスを処理する例です:

QNetworkReply *reply = manager->get(request);
QObject::connect(reply, &QNetworkReply::finished, this, [reply]() {
    // The reply may be wrapped in the finish handler:
    QRestReply restReply(reply);
    if (restReply.isSuccess())
        // ...
});

コールバックとコンテキストオブジェクトの使用

この関数は、QObject (サブクラス)型のコンテキストオブジェクトとコールバック関数をパラメータとして受け取ります。コールバックは、QRestReply& をパラメータとして受け取ります。コールバックは、メンバ関数へのポインタを含む、任意の呼び出し可能な関数にすることができます。

これらのコールバックは、リプライの処理が終了したときに呼び出される(エラーが発生して処理が終了した場合も同様)。

コンテキストオブジェクトはnullptr 、一般的には推奨されない。有効なコンテキストオブジェクトを使うことで、リクエスト処理中に コンテキストオブジェクトが破棄された場合、コールバックが呼び出されない ことを保証する。破棄されたコンテキストにアクセスする野良コールバックは、 アプリケーションの誤動作の原因になります。

以下は、GETリクエストを送信してレスポンスを確認する例です:

// With lambda
manager->get(request, this, [this](QRestReply &reply) {
    if (reply.isSuccess()) {
        // ...
    }
});
// With member function
manager->get(request, this, &MyClass::handleFinished);

関数の多くは、サーバーに送信するデータを受け取ります。データはリクエストの後の2番目のパラメータとして提供されます。

POSTリクエストを送信してレスポンスを確認する例を示します:

QJsonDocument myJson;
// ...
manager->post(request, myJson, this, [this](QRestReply &reply) {
    if (!reply.isSuccess()) {
        // ...
    }
    if (std::optional json = reply.readJson()) {
        // use *json
    }
});

提供されたQRestReply& は、コールバックが実行されている間だけ有効です。より長い時間必要な場合は、別のQRestReply に移動するか、新しいものを作成してQNetworkReply で初期化します (QRestReply::networkReply() を参照)。

サポートされるデータ型

以下の表は、メソッドとサポートされるデータ型をまとめたものである。X はサポートを意味する。

データ型get()post()put()head()patch()deleteResource()sendCustomRequest()
データなしX--X-X-
QByteArrayXXX-X-X
QJsonDocument *)XXX-X--
QVariantMap **)-XX-X--
QHttpMultiPart-XX---X
QIODeviceXXX-X-X

*)QJsonDocumentQJsonDocument::Compact フォーマットで送信され、Content-Type ヘッダーがセットされていない場合、Content-Type ヘッダーはapplication/json にセットされる。

QVariantMap **として扱われる。QJsonObject

QRestReplyQNetworkRequestFactoryQNetworkAccessManagerも参照のこと

メンバ関数ドキュメント

[explicit] QRestAccessManager::QRestAccessManager(QNetworkAccessManager *manager, QObject *parent = nullptr)

QRestAccessManagerオブジェクトを構築し、parent を親オブジェクトとして、manager を通信に使用するQNetworkAccessManager として設定します。

networkAccessManager()も参照してください

[override virtual noexcept] QRestAccessManager::~QRestAccessManager()

QRestAccessManager オブジェクトを破棄します。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::deleteResource(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

request に基づいてHTTP DELETE を発行します。

以下に示すように、リクエストの完了を処理するために、オプションでcallbackcontext オブジェクトを提供することができる:

manager->deleteResource(request, this, [this](QRestReply &reply) {
    if (reply.isSuccess())
        // ...
});

あるいは、返されたQNetworkReply* オブジェクトのシグナルを使用することもできる。詳細はIssuing Network Requests and Handling Replies を参照のこと。

deleteResource() リクエストはデータの提供をサポートしていない。

QRestReplyも参照のこと。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

request に基づいてHTTP GET を発行する。

以下に示すように、リクエストの完了を処理するために、オプションでcallbackcontext オブジェクトを提供することができる:

manager->get(request, this, [this](QRestReply &reply) {
    if (!reply.isSuccess())
        // handle error
    if (std::optional json = reply.readJson())
        // use *json
});

あるいは、返されたQNetworkReply* オブジェクトのシグナルを使用することもできる。詳細はIssuing Network Requests and Handling Replies を参照のこと。

QRestReplyも参照のこと

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

request と提供されたdata に基づいてHTTP GET を発行する。

以下に示すように、リクエストの完了を処理するために、オプションでcallbackcontext オブジェクトを提供することができる:

manager->get(request, myData, this, [this](QRestReply &reply) {
    if (reply.isSuccess())
        // ...
});

あるいは、返されたQNetworkReply* オブジェクトのシグナルを使用することもできる。詳細はIssuing Network Requests and Handling Replies を参照のこと。

QRestReplyも参照のこと。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

これはオーバーロードされた関数です。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

これはオーバーロードされた関数です。

request に基づいてHTTP HEAD を発行する。

オプションのcallbackcontext オブジェクトは、以下に示すように、リクエストの完了を処理するために提供することができます:

manager->head(request, this, [this](QRestReply &reply) {
    if (reply.isSuccess())
        // ...
});

あるいは、返されたQNetworkReply* オブジェクトのシグナルを使用することもできる。詳細はIssuing Network Requests and Handling Replies を参照のこと。

head() リクエストはデータの提供をサポートしていない。

QRestReplyも参照のこと

QNetworkAccessManager *QRestAccessManager::networkAccessManager() const

基になるQNetworkAccessManager インスタンスを返します。

QNetworkAccessManager参照して ください。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

request に基づいてHTTP PATCH を発行する。

以下に示すように、リクエストの完了を処理するために、オプションでcallbackcontext オブジェクトを提供することができる:

manager->patch(request, myData, this, [this](QRestReply &reply) {
    if (reply.isSuccess())
        // ...
});

あるいは、返されたQNetworkReply* オブジェクトのシグナルを使用することもできる。詳細はIssuing Network Requests and Handling Replies を参照のこと。

patch() メソッドは常にdata パラメータを必要とする。以下のデータ型がサポートされている:

*)QJsonDocument::Compact フォーマットで送信され、Content-Type ヘッダが設定されていない場合、Content-Type ヘッダはapplication/json に設定される **)QVariantMap は、 に変換され、 として扱われる。QJsonObject

QRestReplyも参照のこと

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

これはオーバーロードされた関数です。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

これはオーバーロードされた関数です。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

これはオーバーロードされた関数です。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

request に基づいてHTTP POST を発行します。

オプションのcallback およびcontext オブジェクトは、以下に示すように、リクエストの完了を処理するために提供することができる:

manager->post(request, myData, this, [this](QRestReply &reply) {
    if (reply.isSuccess())
        // ...
});

あるいは、返されたQNetworkReply* オブジェクトのシグナルを使用することもできる。詳細はIssuing Network Requests and Handling Replies を参照のこと。

post() メソッドは常にdata パラメータを必要とする。以下のデータ型がサポートされている:

*)QJsonDocument::Compact フォーマットで送信され、Content-Type ヘッダが設定されていない場合、Content-Type ヘッダはapplication/json に設定される **)QVariantMap に変換されて扱われる。QJsonObject

QRestReplyも参照のこと

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

これはオーバーロードされた関数です。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

これはオーバーロードされた関数です。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

これはオーバーロードされた関数です。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

これはオーバーロードされた関数です。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

request に基づいてHTTP PUT を発行します。

オプションのcallbackcontext オブジェクトは、以下に示すように、リクエストの完了を処理するために提供することができます:

manager->put(request, myData, this, [this](QRestReply &reply) {
    if (reply.isSuccess())
        // ...
});

あるいは、返されたQNetworkReply* オブジェクトのシグナルを使用することもできる。詳細はIssuing Network Requests and Handling Replies を参照のこと。

put() メソッドは常にdata パラメータを必要とする。以下のデータ型がサポートされている:

*)QJsonDocument::Compact フォーマットで送信され、Content-Type ヘッダが設定されていない場合、Content-Type ヘッダはapplication/json に設定される **)QVariantMap に変換されて扱われる。QJsonObject

QRestReplyも参照のこと

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

これはオーバーロードされた関数です。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

これはオーバーロードされた関数です。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

これはオーバーロードされた関数です。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

これはオーバーロードされた関数です。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

カスタムmethod と提供されたdata を使ってrequest ベースの HTTP リクエストを発行します。

オプションのcallbackcontext オブジェクトは、下図のようにリクエストの完了を処理するために提供することができます:

manager->sendCustomRequest(request, "MYMETHOD",  myData,  this, [this](QRestReply &reply) {
    if (reply.isSuccess())
        // ...
});

あるいは、返されたQNetworkReply* オブジェクトのシグナルを使用することもできます。詳細はIssuing Network Requests and Handling Replies を参照のこと。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

これはオーバーロードされた関数です。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

これはオーバーロードされた関数です。

ここに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。