Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • O openapi-generator
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 3,476
    • Issues 3,476
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 402
    • Merge requests 402
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • OpenAPI Tools
  • openapi-generator
  • Merge requests
  • !5088

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

  • Review changes

  • Download
  • Email patches
  • Plain diff
Merged Administrator requested to merge github/fork/etherealjoy/add_reques_compression into master Jan 23, 2020
  • Overview 0
  • Commits 2
  • Pipelines 0
  • Changes 12

Created by: etherealjoy

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

  • https://zlib.net/manual.html
  • https://zlib.net/zlib_how.html

@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.
Assignee
Assign to
Reviewers
Request review from
Time tracking
Source branch: github/fork/etherealjoy/add_reques_compression