The http extension allows you to call RESTful endpoints within Postgres.
Quick demo
Overview
This section covers basic concepts:
- REST: stands for REpresentational State Transfer. It's 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
Enable the extension
Dashboard
- Go to the Database page in the Dashboard.
- Click on Extensions in the sidebar.
- Search for
httpand enable the extension.
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, call drop extension.
It's good practice to create the extension within a separate schema (like extensions) to keep the public schema clean.
Available functions
While the main usage is 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: integercontent_type: character varyingheaders: http_header[]content: character varying. Typically you would want to cast this tojsonbusing the formatcontent::jsonb
Examples
Basic GET example [#simple-get-example]
select
"status", "content"::jsonb
from
extensions.http_get('https://jsonplaceholder.typicode.com/todos/1');
Basic POST example [#simple-post-example]
select
"status", "content"::jsonb
from
extensions.http_post(
'https://jsonplaceholder.typicode.com/posts',
'{ "title": "foo", "body": "bar", "userId": 1 }',
'application/json'
);
Resources
- Official
httpGitHub Repository