code: async def api_call(self, path, body=None, full_url=False):
          
          result = None
          if not full_url:
              path = self.full_url(path)
          for i in range(self._restCallRequestCounter):
              try:
                  with async_timeout.timeout(self._restCallTimout, loop=self._loop):
                      result = await self._websession.post(
                          path, data=body, headers=self.headers
                      )
                      if result.status == 200:
                          if result.content_type == "application/json":
                              ret = await result.json()
                          else:
                              ret = True
                          return ret
                      else:
                          raise HmipWrongHttpStatusError
              except (asyncio.TimeoutError, aiohttp.ClientConnectionError):
                  # Both exceptions occur when connecting to the server does
                  # somehow not work.
                  logger.debug("Connection timed out or another error occurred %s" % path)
              except JSONDecodeError as err:
                  logger.exception(err)
              finally:
                  if result is not None:
                      await result.release()
          raise HmipConnectionError("Failed to connect to HomeMaticIp server")
docs: Make the actual call to the HMIP server.
  
          Throws `HmipWrongHttpStatusError` or `HmipConnectionError` if connection has failed or
          response is not correct.