QGIS API Documentation  3.20.0-Odense (decaadbb31)
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 
48 class 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
63  item,
64  self,
67  prev,
68  next,
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 
97  QgsServerOgcApi( QgsServerInterface *serverIface,
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 
150  static QUrl sanitizeUrl( const QUrl &url );
151 
155  static std::string relToString( const QgsServerOgcApi::Rel &rel );
156 
160  static QString contentTypeToString( const QgsServerOgcApi::ContentType &ct );
161 
165  static std::string contentTypeToStdString( const QgsServerOgcApi::ContentType &ct );
166 
170  static QString contentTypeToExtension( const QgsServerOgcApi::ContentType &ct );
171 
175  static QgsServerOgcApi::ContentType contenTypeFromExtension( const std::string &extension );
176 
180  static std::string mimeType( const QgsServerOgcApi::ContentType &contentType );
181 
185  const std::vector<std::shared_ptr<QgsServerOgcApiHandler> > handlers() const SIP_SKIP;
186 
187  private:
188 
189  QString mRootPath;
190  QString mName;
191  QString mDescription;
192  QString mVersion;
193 
194  //Note: this cannot be unique because of SIP bindings
195  std::vector<std::shared_ptr<QgsServerOgcApiHandler>> mHandlers;
196 
198  static QMap<QgsServerOgcApi::ContentType, QStringList> sContentTypeMime;
199 
205  static QHash<QgsServerOgcApi::ContentType, QList<QgsServerOgcApi::ContentType>> sContentTypeAliases;
206 
207 };
208 
209 #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.
@ 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_THROW(name)
Definition: qgis_sip.h:189
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_TRANSFER
Definition: qgis_sip.h:36
#define SIP_VIRTUALERRORHANDLER(name)
Definition: qgis_sip.h:182