QGIS API Documentation 3.28.0-Firenze (ed3ad0430f)
qgsserverogcapi.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsserverogcapi.h - QgsServerOgcApi
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 QGSSERVEROGCAPI_H
17#define QGSSERVEROGCAPI_H
18
19#include "qgsserverapi.h"
20#include "qgis_server.h"
21
22
24
48class SERVER_EXPORT QgsServerOgcApi : public QgsServerApi
49{
50
51 Q_GADGET
52
53 public:
54
55 // Note: non a scoped enum or qHash fails
57 enum Rel
58 {
59 // The following registered link relation types are used
70 // In addition the following link relation types are used for which no applicable registered link relation type could be identified:
73 data
74 };
75 Q_ENUM( Rel )
76
77 // Note: cannot be a scoped enum because qHash does not support them
80 {
85 XML
86 };
87 Q_ENUM( ContentType )
88
89
98 const QString &rootPath,
99 const QString &name,
100 const QString &description = QString(),
101 const QString &version = QString() );
102
103 // QgsServerApi interface
104 const QString name() const override { return mName; }
105 const QString description() const override { return mDescription; }
106 const QString version() const override { return mVersion; }
107 const QString rootPath() const override { return mRootPath ; }
108
109 ~QgsServerOgcApi() override;
110
114 virtual void executeRequest( const QgsServerApiContext &context ) const override SIP_THROW( QgsServerApiBadRequestException ) SIP_VIRTUALERRORHANDLER( serverapi_badrequest_exception_handler );
115
120 static const QMap<QgsServerOgcApi::ContentType, QStringList> contentTypeMimes() SIP_SKIP;
121
126 static const QHash<QgsServerOgcApi::ContentType, QList<QgsServerOgcApi::ContentType> > contentTypeAliases() SIP_SKIP;
127
128 // Utilities
129#ifndef SIP_RUN
130
135 template<class T, typename... Args>
136 void registerHandler( Args... args )
137 {
138 mHandlers.emplace_back( std::make_shared<T>( args... ) );
139 }
140#endif
141
145 void registerHandler( QgsServerOgcApiHandler *handler SIP_TRANSFER );
146
151 static QUrl sanitizeUrl( const QUrl &url );
152
156 static std::string relToString( const QgsServerOgcApi::Rel &rel );
157
161 static QString contentTypeToString( const QgsServerOgcApi::ContentType &ct );
162
166 static std::string contentTypeToStdString( const QgsServerOgcApi::ContentType &ct );
167
171 static QString contentTypeToExtension( const QgsServerOgcApi::ContentType &ct );
172
176 static QgsServerOgcApi::ContentType contenTypeFromExtension( const std::string &extension );
177
181 static std::string mimeType( const QgsServerOgcApi::ContentType &contentType );
182
186 const std::vector<std::shared_ptr<QgsServerOgcApiHandler> > handlers() const SIP_SKIP;
187
188 private:
189
190 QString mRootPath;
191 QString mName;
192 QString mDescription;
193 QString mVersion;
194
195 //Note: this cannot be unique because of SIP bindings
196 std::vector<std::shared_ptr<QgsServerOgcApiHandler>> mHandlers;
197
199 static QMap<QgsServerOgcApi::ContentType, QStringList> sContentTypeMime;
200
206 static QHash<QgsServerOgcApi::ContentType, QList<QgsServerOgcApi::ContentType>> sContentTypeAliases;
207
208};
209
210#endif // QGSSERVEROGCAPI_H
Bad request error API exception.
The QgsServerApiContext class encapsulates the resources for a particular client request: the request...
Server generic API endpoint abstract base class.
Definition: qgsserverapi.h:81
virtual void executeRequest(const QgsServerApiContext &context) const =0
Executes a request by passing the given context to the API handlers.
QgsServerInterface Class defining interfaces exposed by QGIS Server and made available to plugins.
The QgsServerOgcApiHandler abstract class represents a OGC API handler to be registered in QgsServerO...
QGIS Server OGC API endpoint.
const QString rootPath() const override
Returns the root path for the API.
void registerHandler(Args... args)
Registers an OGC API handler passing Args to the constructor.
const QString description() const override
Returns the API description.
ContentType
Media types used for content negotiation, insert more specific first.
@ JSON
"application/openapi+json;version=3.0"
Rel
Rel link types.
@ collection
Refers to a resource providing information about the link’s context.
@ self
The target IRI points to a resource that is a member of the collection represented by the context IRI...
@ prev
Identifies service documentation for the context that is primarily intended for human consumption.
@ service_doc
Identifies service description for the context that is primarily intended for consumption by machines...
@ conformance
Refers to a resource that is comprised of members of the collection represented by the link’s context...
@ describedBy
Refers to a substitute for this context.
@ next
Indicates that the link’s context is a part of a series, and that the previous in the series is the l...
@ license
Indicates that the link’s context is a part of a series, and that the next in the series is the link ...
@ service_desc
Conveys an identifier for the link’s context.
@ items
Refers to a license associated with this context.
@ item
The target IRI points to a resource that is a member of the collection represented by the context IRI...
const QString version() const override
Returns the version of the service.
const QString name() const override
Returns the API name.
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_TRANSFER
Definition: qgis_sip.h:36
#define SIP_VIRTUALERRORHANDLER(name)
Definition: qgis_sip.h:191
#define SIP_THROW(name,...)
Definition: qgis_sip.h:198