Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[C++] [Qt5] Add request compression and handling identity #5088

Merged
merged 2 commits into from
Jan 23, 2020

Conversation

etherealjoy
Copy link
Contributor

@etherealjoy etherealjoy commented Jan 23, 2020

Summay
Support request compression and improve response compression support in Qt5 client.

Changes

  • Split response and request compression
  • Add request compression
  • Add handling of identity Content-Encoding
  • Default gzip for requests and response compression

Sample Test spec

---
# This is a sample Swagger spec, describing a simple API as a starting point.

swagger: "2.0"
info:
  description: Application Test Description
  version: 1.0.0
  title: ApplicationTemplate

host: 0.0.0.0:8080
basePath: /api
schemes:
- http

tags:
- name : CompressionTestServices
  x-displayName : "CompressionTestServices"
  description : |
    "Test Services offered by the application"

paths:
  /simpleEndpoint:
    post:
      tags:
        - CompressionTestServices
      summary: provide a list of Notifications
      operationId: setGetCompressedData
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - name: reqBody
          in: body
          required: true
          schema:
            $ref: '#/definitions/Message'
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/Message'
        '400':
          description: Bad Request
          schema:
            $ref: '#/definitions/Message'
            
definitions:
  Message:
    description: Type to be used to inform about errors happening while executing a command.
    type: object
    properties:
      content:
        description: Provide a list of all errors happened
        type: string

Usage

#include <QCoreApplication>
#include <QObject>
#include <QtGlobal>
#include <QFile>
#include <QString>

#include "OAICompressionTestServicesApi.h"

using namespace OpenAPI;
int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);
    auto api = new OAICompressionTestServicesApi();
    api->setHost(QString("127.0.0.1"));
    api->setPort(8080);
    api->enableRequestCompression();
    api->enableResponseCompression();
    QFile file("request.txt");
    QByteArray bArray;
    if (file.exists()) {
        file.open(QIODevice::ReadOnly);
        bArray = file.readAll();
        file.close();
    }
    QObject::connect(api, &OAICompressionTestServicesApi::setGetCompressedDataSignalFull, [] \
(OAIHttpRequestWorker *worker, OAIMessage summary){
        Q_UNUSED(worker);
        QFile file("response.txt");
        if (file.exists()) {
            file.remove();
        }
        file.open(QIODevice::WriteOnly);
        file.write(summary.getContent().toUtf8());
        file.close();
    });
    OAIMessage msg;
    msg.setContent(QString(bArray));
    api->setGetCompressedData(msg);
    a.exec();
}

Server

  • ASP.NET core with response and request compression

Verification

  • Open wireshark and check the data transferred during the request and response before and after
    api->enableRequestCompression();/api->enableResponseCompression(); are called.

References

@muttleyxd @ravinikam @stkrwork @MartinDelille

PR checklist

  • Read the contribution guidelines.
  • If contributing template-only or documentation-only changes which will change sample output, build the project before.
  • Run the shell script(s) under ./bin/ (or Windows batch scripts under.\bin\windows) to update Petstore samples related to your fix. This is important, as CI jobs will verify all generator outputs of your HEAD commit, and these must match the expectations made by your contribution. You only need to run ./bin/{LANG}-petstore.sh, ./bin/openapi3/{LANG}-petstore.sh if updating the code or mustache templates for a language ({LANG}) (e.g. php, ruby, python, etc).
  • File the PR against the correct branch: master, 4.3.x, 5.0.x. Default: master.
  • Copy the technical committee to review the pull request if your PR is targeting a particular programming language.

Copy link
Contributor

@muttleyxd muttleyxd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks great!

@etherealjoy etherealjoy added this to the 4.2.3 milestone Jan 23, 2020
@etherealjoy etherealjoy merged commit 138232d into OpenAPITools:master Jan 23, 2020
@etherealjoy etherealjoy deleted the add_reques_compression branch June 17, 2020 14:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants