QGIS API Documentation 3.27.0-Master (c6eca784ad)
qgsserverogcapihandler.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsserverogcapihandler.h - QgsServerOgcApiHandler
3
4 ---------------------
5 begin : 10.7.2019
6 copyright : (C) 2019 by Alessandro Pasotti
7 email : elpaso at itopen dot it
8 ***************************************************************************
9 * *
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
14 * *
15 ***************************************************************************/
16#ifndef QGSSERVEROGCAPIHANDLER_H
17#define QGSSERVEROGCAPIHANDLER_H
18
19#include <QRegularExpression>
20#include "qgis_server.h"
22#include "qgsserverogcapi.h"
23#include "nlohmann/json_fwd.hpp"
24#include "inja/inja.hpp"
25
26#ifndef SIP_RUN
27using namespace nlohmann;
28#endif
29
31
94class SERVER_EXPORT QgsServerOgcApiHandler
95{
96
97 public:
98
100
101 // /////////////////////////////////////////////
102 // MAIN Section (operational)
103
113 virtual QRegularExpression path() const = 0;
114
116 virtual std::string operationId() const = 0;
117
124 virtual QList<QgsServerQueryStringParameter> parameters( const QgsServerApiContext &context ) const { Q_UNUSED( context ); return { }; }
125
126 // /////////////////////////////////////////////
127 // METADATA Sections (informative)
128
130 virtual std::string summary() const = 0;
131
133 virtual std::string description() const = 0;
134
136 virtual std::string linkTitle() const = 0;
137
139 virtual QgsServerOgcApi::Rel linkType() const = 0;
140
142 virtual QStringList tags() const { return {}; }
143
150 virtual QgsServerOgcApi::ContentType defaultContentType() const;
151
158 QList<QgsServerOgcApi::ContentType> contentTypes() const SIP_SKIP;
159
168 virtual void handleRequest( const QgsServerApiContext &context ) const SIP_THROW( QgsServerApiBadRequestException ) SIP_VIRTUALERRORHANDLER( serverapi_badrequest_exception_handler );
169
189 virtual QVariantMap values( const QgsServerApiContext &context ) const SIP_THROW( QgsServerApiBadRequestException );
190
195 QString contentTypeForAccept( const QString &accept ) const;
196
197 // /////////////////////////////////////////////////////
198 // Utility methods: override should not be required
199
200#ifndef SIP_RUN // Skip SIP
201
226 void write( json &data, const QgsServerApiContext &context, const json &htmlMetadata = nullptr ) const;
227
234 void jsonDump( json &data, const QgsServerApiContext &context, const QString &contentType = QStringLiteral( "application/json" ) ) const;
235
242 void htmlDump( const json &data, const QgsServerApiContext &context ) const;
243
251 virtual json schema( const QgsServerApiContext &context ) const;
252
262 json link( const QgsServerApiContext &context,
263 const QgsServerOgcApi::Rel &linkType = QgsServerOgcApi::Rel::self,
264 const QgsServerOgcApi::ContentType contentType = QgsServerOgcApi::ContentType::JSON,
265 const std::string &title = "" ) const;
266
275 json links( const QgsServerApiContext &context ) const;
276
277
287 QgsVectorLayer *layerFromContext( const QgsServerApiContext &context ) const;
288
289#endif // SIP skipped
290
314 void write( QVariant &data, const QgsServerApiContext &context, const QVariantMap &htmlMetadata = QVariantMap() ) const SIP_THROW( QgsServerApiBadRequestException );
315
323 std::string href( const QgsServerApiContext &context, const QString &extraPath = QString(), const QString &extension = QString() ) const;
324
333 virtual const QString templatePath( const QgsServerApiContext &context ) const;
334
340 virtual const QString staticPath( const QgsServerApiContext &context ) const;
341
351 QgsServerOgcApi::ContentType contentTypeFromRequest( const QgsServerRequest *request ) const;
352
356 static QString parentLink( const QUrl &url, int levels = 1 );
357
362 static QgsVectorLayer *layerFromCollectionId( const QgsServerApiContext &context, const QString &collectionId );
363
369 static json defaultResponse() SIP_SKIP;
370
378 json jsonTags( ) const SIP_SKIP;
379
380 protected:
381
385 void setContentTypesInt( const QList<int> &contentTypes ) SIP_PYNAME( setContentTypes );
386
391 void setContentTypes( const QList<QgsServerOgcApi::ContentType> &contentTypes ) SIP_SKIP;
392
393 private:
394
396 QList<QgsServerOgcApi::ContentType> mContentTypes = { QgsServerOgcApi::ContentType::JSON, QgsServerOgcApi::ContentType::HTML };
397
398
399};
400
401#endif // QGSSERVEROGCAPIHANDLER_H
Bad request error API exception.
The QgsServerApiContext class encapsulates the resources for a particular client request: the request...
The QgsServerOgcApiHandler abstract class represents a OGC API handler to be registered in QgsServerO...
virtual std::string summary() const =0
Summary.
virtual QgsServerOgcApi::Rel linkType() const =0
Main role for the resource link.
virtual QStringList tags() const
Tags.
virtual std::string linkTitle() const =0
Title for the handler link.
virtual QList< QgsServerQueryStringParameter > parameters(const QgsServerApiContext &context) const
Returns a list of query string parameters.
virtual std::string operationId() const =0
Returns the operation id for template file names and other internal references.
virtual std::string description() const =0
Description.
virtual QRegularExpression path() const =0
URL pattern for this handler, named capture group are automatically extracted and returned by values(...
QGIS Server OGC API endpoint.
ContentType
Media types used for content negotiation, insert more specific first.
Rel
Rel link types.
QgsServerRequest Class defining request interface passed to services QgsService::executeRequest() met...
Represents a vector layer which manages a vector based data sets.
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_PYNAME(name)
Definition: qgis_sip.h:81
#define SIP_VIRTUALERRORHANDLER(name)
Definition: qgis_sip.h:191
#define SIP_THROW(name,...)
Definition: qgis_sip.h:198