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
@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.