Improving No-Code APIs with PostgreSQL, PostgREST, and Apache APISIX

I spoke at Swiss PgDay in Switzerland in late June. The talk was about how to create a no-code API with the famous PostgreSQL database, the related PostgREST, and Apache APISIX, of course. I already wrote about the idea in a previous post. However, I w…


This content originally appeared on HackerNoon and was authored by Nicolas Frankel

I spoke at Swiss PgDay in Switzerland in late June. The talk was about how to create a no-code API with the famous PostgreSQL database, the related PostgREST, and Apache APISIX, of course. I already wrote about the idea in a previous post. However, I wanted to improve it, if only slightly.

\ PostgREST offers a powerful SELECT mechanism. To list all entities with a column equal to a value, you need the following command:

\

curl /products?id=eq.1
  1. id is the column
  2. eq.1 corresponds to the WHERE clause

\ In this case, the generated query is SELECT * FROM products WHERE id=1.

\ The query syntax is powerful and allows you to express complex queries. However, as an API designer, I want to avoid exposing users to this complexity. For example, a regular API can manage entities by their ID, e.g., /products/1. In turn, you'd expect PostgREST to be able to do the same with primary keys. Unfortunately, it doesn't treat primary keys any differently than regular columns. Apache APISIX to the rescue.

\ One of APISIX's best features is to rewrite requests, i.e., exposing /products/1 and forwarding /products?id=eq.1 to PostgREST. Let's do it.

\ First, we need to capture the ID of the path parameter. For this, we need to replace the regular radix tree router with the radix tree with a parameter router.

\

apisix:
    router:
        http: radixtree_uri_with_parameter

\ The next step is to rewrite the URL. We use the proxy-rewrite plugin for this on a /products/:id route. Unfortunately, using the :id parameter above in the regular expression is impossible. We need to copy it to a place that is accessible. To do that, before the rewriting, we can leverage the serverless-pre-function. With the plugin, you can write Lua code directly. It's an excellent alternative to a full-fledged plugin for short, straightforward snippets.

\ Here's the configuration:

\

curl -i http://localhost:9180/apisix/admin/plugin_configs/1 -X PUT -d '
{
  "plugins": {
    "serverless-pre-function": {
      "phase": "rewrite",
      "functions" : [
        "return function(_, ctx)
          ctx.var.product_id = ctx.curr_req_matched.id;         #1
        end"
      ]
    },
    "proxy-rewrite": {
      "uri": "/products?id=eq.$product_id"                      #2
    }
  }
}'
  1. Copy the captured id variable to a place accessible to other plugins later on
  2. Use it!

\ Thanks to my colleague Zeping for pointing out the solution to me!

\ You can expose the /products/1 REST-friendly URL and let APISIX rewrite it for PostgREST.

Conclusion

In this post, I've described using the proxy-rewrite plugin with a path variable. You can reuse the same technique with multiple variables. Keep also in mind that the serverless plugin is a hidden jewel; it can help you with small Lua snippets before moving to a full-fledged plugin.

To go further:

\


This content originally appeared on HackerNoon and was authored by Nicolas Frankel


Print Share Comment Cite Upload Translate Updates
APA

Nicolas Frankel | Sciencx (2024-07-19T13:11:20+00:00) Improving No-Code APIs with PostgreSQL, PostgREST, and Apache APISIX. Retrieved from https://www.scien.cx/2024/07/19/improving-no-code-apis-with-postgresql-postgrest-and-apache-apisix/

MLA
" » Improving No-Code APIs with PostgreSQL, PostgREST, and Apache APISIX." Nicolas Frankel | Sciencx - Friday July 19, 2024, https://www.scien.cx/2024/07/19/improving-no-code-apis-with-postgresql-postgrest-and-apache-apisix/
HARVARD
Nicolas Frankel | Sciencx Friday July 19, 2024 » Improving No-Code APIs with PostgreSQL, PostgREST, and Apache APISIX., viewed ,<https://www.scien.cx/2024/07/19/improving-no-code-apis-with-postgresql-postgrest-and-apache-apisix/>
VANCOUVER
Nicolas Frankel | Sciencx - » Improving No-Code APIs with PostgreSQL, PostgREST, and Apache APISIX. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/07/19/improving-no-code-apis-with-postgresql-postgrest-and-apache-apisix/
CHICAGO
" » Improving No-Code APIs with PostgreSQL, PostgREST, and Apache APISIX." Nicolas Frankel | Sciencx - Accessed . https://www.scien.cx/2024/07/19/improving-no-code-apis-with-postgresql-postgrest-and-apache-apisix/
IEEE
" » Improving No-Code APIs with PostgreSQL, PostgREST, and Apache APISIX." Nicolas Frankel | Sciencx [Online]. Available: https://www.scien.cx/2024/07/19/improving-no-code-apis-with-postgresql-postgrest-and-apache-apisix/. [Accessed: ]
rf:citation
» Improving No-Code APIs with PostgreSQL, PostgREST, and Apache APISIX | Nicolas Frankel | Sciencx | https://www.scien.cx/2024/07/19/improving-no-code-apis-with-postgresql-postgrest-and-apache-apisix/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.