QGIS API Documentation 3.99.0-Master (2fe06baccd8)
Loading...
Searching...
No Matches
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 <nlohmann/json_fwd.hpp>
20
21#include "qgis_server.h"
22#include "qgsserverogcapi.h"
24
25#include <QRegularExpression>
26
27#ifndef SIP_RUN
28using namespace nlohmann;
29#endif
30
32
95class SERVER_EXPORT QgsServerOgcApiHandler
96{
97 public:
99
100 // /////////////////////////////////////////////
101 // MAIN Section (operational)
102
112 virtual QRegularExpression path() const = 0;
113
115 virtual std::string operationId() const = 0;
116
123 virtual QList<QgsServerQueryStringParameter> parameters( const QgsServerApiContext &context ) const
124 {
125 Q_UNUSED( context );
126 return {};
127 }
128
129 // /////////////////////////////////////////////
130 // METADATA Sections (informative)
131
133 virtual std::string summary() const = 0;
134
136 virtual std::string description() const = 0;
137
139 virtual std::string linkTitle() const = 0;
140
142 virtual QgsServerOgcApi::Rel linkType() const = 0;
143
145 virtual QStringList tags() const { return {}; }
146
153 virtual QgsServerOgcApi::ContentType defaultContentType() const;
154
161 QList<QgsServerOgcApi::ContentType> contentTypes() const SIP_SKIP;
162
171 virtual void handleRequest( const QgsServerApiContext &context ) const SIP_THROW( QgsServerApiBadRequestException ) SIP_VIRTUALERRORHANDLER( serverapi_badrequest_exception_handler );
172
192 virtual QVariantMap values( const QgsServerApiContext &context ) const SIP_THROW( QgsServerApiBadRequestException );
193
198 QString contentTypeForAccept( const QString &accept ) const;
199
200 // /////////////////////////////////////////////////////
201 // Utility methods: override should not be required
202
203#ifndef SIP_RUN // Skip SIP
204
229 void write( json &data, const QgsServerApiContext &context, const json &htmlMetadata = nullptr ) const;
230
237 void jsonDump( json &data, const QgsServerApiContext &context, const QString &contentType = QStringLiteral( "application/json" ) ) const;
238
245 void htmlDump( const json &data, const QgsServerApiContext &context ) const;
246
254 virtual json schema( const QgsServerApiContext &context ) const;
255
265 json link( const QgsServerApiContext &context, const QgsServerOgcApi::Rel &linkType = QgsServerOgcApi::Rel::self, const QgsServerOgcApi::ContentType contentType = QgsServerOgcApi::ContentType::JSON, 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:
384 void setContentTypesInt( const QList<int> &contentTypes ) SIP_PYNAME( setContentTypes );
385
390 void setContentTypes( const QList<QgsServerOgcApi::ContentType> &contentTypes ) SIP_SKIP;
391
392 private:
395};
396
397#endif // QGSSERVEROGCAPIHANDLER_H
Bad request error API exception.
Encapsulates the resources for a particular client request.
An abstract class which represents an OGC API handler to be registered in QgsServerOgcApi class.
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.
@ self
Conveys an identifier for the link’s context.
Defines requests passed to QgsService classes.
Represents a vector layer which manages a vector based dataset.
#define SIP_SKIP
Definition qgis_sip.h:134
#define SIP_PYNAME(name)
Definition qgis_sip.h:89
#define SIP_VIRTUALERRORHANDLER(name)
Definition qgis_sip.h:204
#define SIP_THROW(name,...)
Definition qgis_sip.h:211