Files
supabase/apps/temp-docs/docs/guides/database/extensions/http.mdx
2022-04-26 14:17:19 +02:00

114 lines
2.4 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: http
title: "http: RESTful Client"
description: An HTTP Client for PostgreSQL Functions.
---
# http: RESTful Client
The `http` extension allows you to call RESTful endpoints within Postgres.
## Overview
Let's cover some basic concepts:
- REST: stands for REpresentational State Transfer. It's simply a way to request data from external services.
- RESTful APIs are servers which accept HTTP "calls". The calls are typically:
- `GET` Read only access to a resource.
- `POST` Creates a new resource.
- `DELETE` Removes a resource.
- `PUT` Updates an existing resource or creates a new resource.
You can use the `http` extension to make these network requests from Postgres.
## Usage
### Enabling
<Tabs
defaultActiveId="UI"
>
<TabPanel id="UI" label="UI">
```sh
1. Go to the Database page.
2. Click on "Extensions" in the sidebar.
3. Search for "http".
4. Click the toggle.
```
</TabPanel>
<TabPanel id="SQL" label="SQL">
```sql
-- Example: enable the "http" extension
create extension http with schema extensions;
-- Example: disable the "http" extension
drop extension if exists http;
```
Even though the SQL code is `create extension`, this is the equivalent of "enabling the extension".
To disable an extension you can call `drop extension`.
It's good practice to create the extension within a separate schema (like `extensions`) to keep your database clean.
</TabPanel>
</Tabs>
### Available functions
While the main usage is simply `http('http_request')`, there are 5 wrapper functions for specific functionality:
- `http_get()`
- `http_post()`
- `http_put()`
- `http_delete()`
- `http_head()`
### Returned values
A successful call to a web URL from the `http` extension returns a record with the following fields:
- `status`: integer
- `content_type`: character varying
- `headers`: http_header[]
- `content`: character varying. Typically you would want to cast this to `jsonb` using the format `content::jsonb`
## Examples
### Simple `GET` example
```sql
select
"status", "content"::jsonb
from
http_get('https://jsonplaceholder.typicode.com/todos/1');
```
### Simple `POST` example
```sql
select
"status", "content"::jsonb
from
http_post(
'https://jsonplaceholder.typicode.com/posts',
'{ "title": "foo", "body": "bar", "userId": 1 }',
'application/json'
);
```
## Resources
- Official [`http` Github Repository](https://github.com/pramsey/pgsql-http).