This is an automated email from the ASF dual-hosted git repository.

mgreber pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/kudu.git


The following commit(s) were added to refs/heads/gh-pages by this push:
     new 1fca6897a Add Introducing REST API blog post
1fca6897a is described below

commit 1fca6897a5f0e3b78df8435bb31c520db2e833b3
Author: Gabriella Lotz <[email protected]>
AuthorDate: Mon Aug 25 13:13:02 2025 +0200

    Add Introducing REST API blog post
    
    Preview can be found at
    https://gabriellalotz.github.io/2025/11/10/introducing-the-rest-api.html
    
    Change-Id: I1435431857a9f493e6492fae002c70f7af4cdd6c
    Reviewed-on: http://gerrit.cloudera.org:8080/23655
    Reviewed-by: Alexey Serbin <[email protected]>
    Tested-by: Alexey Serbin <[email protected]>
    Reviewed-by: Abhishek Chennaka <[email protected]>
    Reviewed-by: Marton Greber <[email protected]>
    Reviewed-by: Zoltan Chovan <[email protected]>
    Reviewed-by: Attila Bukor <[email protected]>
---
 _posts/2025-11-10-introducing-the-rest-api.md | 142 ++++++++++++++++++++++++++
 img/swagger.png                               | Bin 0 -> 290094 bytes
 2 files changed, 142 insertions(+)

diff --git a/_posts/2025-11-10-introducing-the-rest-api.md 
b/_posts/2025-11-10-introducing-the-rest-api.md
new file mode 100644
index 000000000..24a50dcb8
--- /dev/null
+++ b/_posts/2025-11-10-introducing-the-rest-api.md
@@ -0,0 +1,142 @@
+---
+layout: post
+title: Introducing REST API for metadata management to Apache Kudu
+author: Gabriella Lotz
+---
+
+Apache Kudu has long provided client APIs in C++, Java, and Python for building
+client applications. Today, we're excited to announce the introduction of a 
REST
+API for table DDL operations that makes Kudu even more accessible to developers
+and integration tools.
+
+This feature is available in the master branch and will be released with
+Kudu 1.19.0.
+
+<!--more-->
+
+## Overview
+
+The Apache Kudu REST API exposes table metadata and administrative operations
+over HTTP on top of Kudu's system catalog. It lets users handle these tasks 
with
+lightweight REST calls instead of building a full client application that
+depends on the Kudu client library and uses KRPC to interact with Kudu 
clusters.
+
+## Key Features
+
+* **DDL Operations**: Create, read, update, and delete tables through HTTP
+  endpoints
+* **JSON-based**: All requests and responses use JSON format for easy parsing
+* **RESTful Design**: Follows standard HTTP methods and status codes
+* **Kerberos/SPNEGO Authentication**: Integrates with Kudu's existing
+  authentication mechanisms
+
+## API Overview
+
+The REST API is available on the master's webserver at `/api/v1/` and provides
+endpoints for table DDL operations. The API supports standard HTTP methods
+(GET, POST, PUT, DELETE) and returns JSON responses.
+
+### Available Endpoints
+
+- **GET** `/api/v1/tables` - List all tables
+- **POST** `/api/v1/tables` - Create a new table
+- **GET** `/api/v1/tables/<table_id>` - Get table details
+- **PUT** `/api/v1/tables/<table_id>` - Update table metadata
+- **DELETE** `/api/v1/tables/<table_id>` - Delete a table
+- **GET** `/api/v1/leader` - Discover the current leader master
+
+### Example Request
+
+**GET** `/api/v1/tables/<table_id>`
+
+```bash
+curl http://master-host:8051/api/v1/tables/a2810622a25b4a3e8ce0be3ece103c50
+```
+
+For secure clusters with Kerberos/SPNEGO authentication enabled, include
+authentication flags in the curl command (e.g., `--negotiate -u :`).
+
+**Response:**
+```json
+{
+  "name": "example_table",
+  "id": "a2810622a25b4a3e8ce0be3ece103c50",
+  "schema": {
+    "columns": [
+      {
+        "id": 10,
+        "name": "column_name",
+        "type": "INT8",
+        "is_key": true,
+        "is_nullable": false,
+        "encoding": "AUTO_ENCODING",
+        "compression": "DEFAULT_COMPRESSION",
+        "cfile_block_size": 0,
+        "immutable": false
+      }
+    ]
+  },
+  "partition_schema": {
+    "hash_schema": [
+      {
+        "columns": [
+          {
+            "id": 10
+          }
+        ],
+        "num_buckets": 2,
+        "seed": 0
+      }
+    ],
+    "range_schema": {
+      "columns": [
+        {
+          "id": 10
+        }
+      ]
+    }
+  },
+  "owner": "default",
+  "comment": "",
+  "extra_config": {}
+}
+```
+
+For complete API documentation, the OpenAPI specification is available in the
+[Kudu 
repository](https://github.com/apache/kudu/blob/master/www/swagger/kudu-api.json).
+On a Kudu cluster running this feature, the API documentation is accessible at
+`http://master-host:8051/api/docs`:
+
+![png]({{ site.github.url }}/img/swagger.png){: .img-responsive}
+
+## Limitations
+
+### Multi-Master Setup
+In multi-master Kudu clusters, only the leader master will successfully process
+REST API requests. Non-leader masters will respond with an HTTP 503 (Service
+Unavailable) error. Since the leader master can change at any time due to
+failures or cluster reconfigurations, applications should handle 503 errors by
+querying the `/api/v1/leader` endpoint to discover the current leader and
+retrying the request against the new leader master's address.
+
+### Metadata Only
+This REST API focuses exclusively on table DDL operations. Data read/write
+operations are not supported through this interface and should continue to use
+Kudu's native client APIs.
+
+## Configuration
+
+The REST API must be explicitly enabled using the `--enable_rest_api` flag on
+Kudu masters. The master's webserver must also be enabled (via the
+`--webserver_enabled` flag) since the REST API is served through the webserver.
+
+## References
+
+- OpenAPI Specification:
+  [https://swagger.io/specification/](https://swagger.io/specification/)
+- Kudu REST API OpenAPI specification:
+  
[https://github.com/apache/kudu/blob/master/www/swagger/kudu-api.json](https://github.com/apache/kudu/blob/master/www/swagger/kudu-api.json)
+- Kudu C++ Client API documentation:
+  
[https://kudu.apache.org/cpp-client-api/index.html](https://kudu.apache.org/cpp-client-api/index.html)
+- Kudu Java Client API documentation:
+  
[https://kudu.apache.org/apidocs/index.html](https://kudu.apache.org/apidocs/index.html)
diff --git a/img/swagger.png b/img/swagger.png
new file mode 100644
index 000000000..8ed9783eb
Binary files /dev/null and b/img/swagger.png differ

Reply via email to