Class: Ecoportal::API::Common::Client
- Inherits:
-
Object
- Object
- Ecoportal::API::Common::Client
- Includes:
- ElasticApmIntegration
- Defined in:
- lib/ecoportal/api/common/client.rb
Overview
- You can see the documentation of the
HTTP
module in the repository- it does
extend
the moduleChainable
(chainable.rb), - where all the http requests are dev by using
HTTP::Client#request
(client.rb) - which calls
build_request
(newHTTP::Request
) andperform
(newHTTP::Connection
) - to return
HTTP::Response
(response.rb)
- it does
Constant Summary collapse
- DELAY_REQUEST_RETRY =
5
- RETRY_ATTEMPTS =
5
Constants included from ElasticApmIntegration
ElasticApmIntegration::APM_SERVICE_NAME
Instance Attribute Summary collapse
-
#host ⇒ String
readonly
the remote target server.
-
#logger ⇒ Logger
the logger.
Instance Method Summary collapse
-
#base_request ⇒ HTTP
Creates a HTTP object adding the
X-ApiKey
orX-ECOPORTAL-API-KEY
param to the header, depending on the API version. -
#delete(path) ⇒ Common::Reponse
Sends an http
DELETE
request against the api version usingpath
to complete the base url. -
#get(path, params: {}) ⇒ Common::Reponse
Sends an http
GET
request against the api version usingpath
to complete the base url, and adding the key_value pairs ofparams
in the http header. -
#initialize(api_key:, version: "v1", host: "live.ecoportal.com", logger: nil, response_logging: false) ⇒ Client
constructor
An object that holds the configuration of the api connection.
-
#log(level) { ... } ⇒ Object
Logger interface.
-
#patch(path, data:) ⇒ Common::Reponse
Sends an http
PATCH
request against the api version usingpath
to complete the base url, and thedata
as a body of the http request. -
#post(path, data:) ⇒ Common::Reponse
Sends an http
POST
request against the api version usingpath
to complete the base url, and thedata
as a body of the http request. -
#request {|http| ... } ⇒ Common::Reponse
Allows to launch a different operation via
block
, providing the basic HTTP connection to the block. -
#url_for(path) ⇒ String
Full URl builder of the request.
-
#wrap_response(response) ⇒ Common::Reponse
Wrap with basic custom object of the gem for responses.
Methods included from ElasticApmIntegration
Constructor Details
#initialize(api_key:, version: "v1", host: "live.ecoportal.com", logger: nil, response_logging: false) ⇒ Client
the api_key
will be automatically added as parameter X-ApiKey
in the header of the http requests.
Returns an object that holds the configuration of the api connection.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/ecoportal/api/common/client.rb', line 33 def initialize(api_key:, version: "v1", host: "live.ecoportal.com", logger: nil, response_logging: false) @version = version @api_key = api_key @logger = logger @host = host @response_logging_enabled = response_logging if host.match(/^localhost|^127\.0\.0\.1/) @base_uri = "http://#{host}/api/" else @base_uri = "https://#{host}/api/" end log(:info) { "#{version} client initialized pointing at #{host}" } return unless @api_key.nil? || @api_key.match(/\A\W*\z/) log(:error) { "Api-key missing!" } end |
Instance Attribute Details
#host ⇒ String (readonly)
the remote target server.
18 19 20 |
# File 'lib/ecoportal/api/common/client.rb', line 18 def host @host end |
#logger ⇒ Logger
the logger.
18 19 20 |
# File 'lib/ecoportal/api/common/client.rb', line 18 def logger @logger end |
Instance Method Details
#base_request ⇒ HTTP
It configures HTTP so it only allows body data in json format.
Creates a HTTP object adding the X-ApiKey
or X-ECOPORTAL-API-KEY
param
to the header, depending on the API version.
141 142 143 144 145 146 147 148 149 |
# File 'lib/ecoportal/api/common/client.rb', line 141 def base_request @base_request ||= case @version when "v2" HTTP.headers("X-ECOPORTAL-API-KEY" => @api_key).accept(:json) else HTTP.headers("X-ApiKey" => @api_key).accept(:json) end end |
#delete(path) ⇒ Common::Reponse
Sends an http DELETE
request against the api version using path
to complete the base url.
112 113 114 115 116 117 118 |
# File 'lib/ecoportal/api/common/client.rb', line 112 def delete(path) instrument("DELETE", path) do request do |http| http.delete(url_for(path)) end end end |
#get(path, params: {}) ⇒ Common::Reponse
Sends an http GET
request against the api version using path
to complete the base url,
and adding the key_value pairs of params
in the http header.
73 74 75 76 77 78 79 |
# File 'lib/ecoportal/api/common/client.rb', line 73 def get(path, params: {}) instrument("GET", path, params) do request do |http| http.get(url_for(path), params: params) end end end |
#log(level) { ... } ⇒ Object
Logger interface. @example: log(:info) information on what's going on" log(:warn) is a warning that something is likely to have gone amiss" log(:error) went wrong" log(:fatal) unrecoverable error has happend"
61 62 63 |
# File 'lib/ecoportal/api/common/client.rb', line 61 def log(level, &block) logger&.send(level, &block) end |
#patch(path, data:) ⇒ Common::Reponse
it automatically adds the http header param Content-Type
as application/json
Sends an http PATCH
request against the api version using path
to complete the base url,
and the data
as a body of the http request.
101 102 103 104 105 106 107 |
# File 'lib/ecoportal/api/common/client.rb', line 101 def patch(path, data:) instrument("PATCH", path, data) do request do |http| http.patch(url_for(path), json: data) end end end |
#post(path, data:) ⇒ Common::Reponse
it automatically adds the http header param Content-Type
as application/json
Sends an http POST
request against the api version using path
to complete the base url,
and the data
as a body of the http request.
87 88 89 90 91 92 93 |
# File 'lib/ecoportal/api/common/client.rb', line 87 def post(path, data:) instrument("POST", path, data) do request do |http| http.post(url_for(path), json: data) end end end |
#request {|http| ... } ⇒ Common::Reponse
Allows to launch a different operation via block
, providing the
basic HTTP connection to the block.
126 127 128 |
# File 'lib/ecoportal/api/common/client.rb', line 126 def request wrap_response yield(base_request) end |
#url_for(path) ⇒ String
Full URl builder of the request
154 155 156 |
# File 'lib/ecoportal/api/common/client.rb', line 154 def url_for(path) @base_uri+@version+path end |