diff --git a/developer_manual/digging_deeper/http_client.rst b/developer_manual/digging_deeper/http_client.rst new file mode 100644 index 00000000000..a3415841558 --- /dev/null +++ b/developer_manual/digging_deeper/http_client.rst @@ -0,0 +1,134 @@ +=========== +HTTP Client +=========== + +Nextcloud comes with a simple HTTP client that can be used to send requests to other web servers. This client follows Nextcloud's configuration, security restrictions and proxy settings. + +Acquiring a HTTP Client +----------------------- + +HTTP client instances are built using the client service `factory `_ ``IClientService``. The factory can be :ref:`injected` into any app class: + +.. code-block:: php + + clientService = $clientService; + } + + public function downloadNextcloudWebsite(): void { + $client = $this->clientService->newClient(); + $response = $client->get('https://nextcloud.com'); + } + } + +HEAD request +------------ + +.. code-block:: php + + clientService->newClient(); + $response = $client->head('https://nextcloud.com'); + + +GET request +----------- + +.. code-block:: php + + clientService->newClient(); + $response = $client->get('https://nextcloud.com'); + +POST request +------------ + +.. code-block:: php + + clientService->newClient(); + $response = $client->post('https://api.domain.tld/pizza', [ + 'headers' => [ + 'Accept' => 'application/json', + 'Content-Type' => 'application/json', + ], + 'body' => json_encode([ + 'toppings' => [ + 'cheese', + 'pineapple', + ], + ]) + ]); + $pizza = json_decode($response, true); + +PUT request +----------- + +.. code-block:: php + + clientService->newClient(); + $response = $client->put('https://api.domain.tld/pizza/42', [ + 'headers' => [ + 'Accept' => 'application/json', + 'Content-Type' => 'application/json', + ], + 'body' => json_encode([ + 'toppings' => [ + 'cheese', + 'pineapple', + ], + ]) + ]); + $pizza = json_decode($response, true); + +DELETE request +-------------- + +.. code-block:: php + + clientService->newClient(); + $response = $client->delete('https://api.domain.tld/pizza/42'); + +OPTIONS request +--------------- + +.. code-block:: php + + clientService->newClient(); + $response = $client->options('https://nextcloud.com'); + $status = $response->getStatusCode(); + $allHeaders = $response->getHeaders(); + $contentType = $response->getHeader('content-type'); + +Error handling +-------------- + +Errors are signaled with exceptions. Catch PHP's base ``Exception``. + +.. code-block:: php + + clientService->newClient(); + try { + $response = $client->options('https://nextcloud.com'); + } catch (Exception $e) { + // Handle the error + } \ No newline at end of file diff --git a/developer_manual/digging_deeper/index.rst b/developer_manual/digging_deeper/index.rst index c336f01679c..97f03d1feb3 100644 --- a/developer_manual/digging_deeper/index.rst +++ b/developer_manual/digging_deeper/index.rst @@ -11,6 +11,7 @@ Digging deeper classloader continuous_integration flow + http_client javascript-apis npm notifications