From f58b57ec84dcaa6a52063591ff0cfe8c7ca29d70 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Thu, 19 Feb 2026 17:42:01 -0800 Subject: [PATCH] Add S3 API Comparison page and update sidebar --- S3-API-Comparison.md | 69 ++++++++++++++++++++++++++++++++++++++++++++ _Sidebar.md | 1 + 2 files changed, 70 insertions(+) create mode 100644 S3-API-Comparison.md diff --git a/S3-API-Comparison.md b/S3-API-Comparison.md new file mode 100644 index 0000000..64c02f3 --- /dev/null +++ b/S3-API-Comparison.md @@ -0,0 +1,69 @@ +# S3 API Comparison: SeaweedFS vs MinIO + +This page compares the S3 API implementation in SeaweedFS with MinIO. + +## Comparison Summary + +| Feature Area | SeaweedFS Support | MinIO Support | Notes | +| :--- | :---: | :---: | :--- | +| **Basic Object Ops** | ✅ Full | ✅ Full | GET, PUT, DELETE, HEAD, COPY | +| **Bucket Ops** | ✅ Full | ✅ Full | Create, Delete, List, Head | +| **Multipart Upload**| ✅ Full | ✅ Full | | +| **Object Tagging** | ✅ Full | ✅ Full | | +| **Object Lock** | ✅ Full | ✅ Full | Retention, Legal Hold | +| **Bucket Policy** | ✅ Full | ✅ Full | | +| **Lifecycle** | ✅ Full | ✅ Full | | +| **Versioning** | ✅ Full | ✅ Full | | +| **ACLs** | ✅ Full | ⚠️ Partial | MinIO has dummy handlers for some ACLs | +| **S3 Tables** | ✅ Full | ❌ No | SeaweedFS supports Iceberg via S3 Tables | +| **Object Select** | ❌ No | ✅ Yes | `SelectObjectContent` | +| **Object Attributes**| ❌ No | ✅ Yes | `GetObjectAttributes` | +| **Lambda Triggers** | ❌ No | ✅ Yes | `GetObjectLambda` | +| **Sts** | ✅ Partial | ✅ Full | Both support AssumeRole | + +## Implemented APIs (Both) + +- **Service Operations**: `ListBuckets` +- **Bucket Operations**: `HeadBucket`, `PutBucket`, `DeleteBucket`, `ListObjectsV1`, `ListObjectsV2`, `ListObjectVersions`, `GetBucketAcl`, `PutBucketAcl`, `GetBucketPolicy`, `PutBucketPolicy`, `DeleteBucketPolicy`, `GetBucketCors`, `PutBucketCors`, `DeleteBucketCors`, `GetBucketLifecycle`, `PutBucketLifecycle`, `DeleteBucketLifecycle`, `GetBucketLocation`, `GetBucketVersioning`, `PutBucketVersioning`, `GetBucketObjectLockConfiguration`, `PutBucketObjectLockConfiguration`, `GetBucketTagging`, `PutBucketTagging`, `DeleteBucketTagging`, `GetBucketEncryption`, `PutBucketEncryption`, `DeleteBucketEncryption` +- **Object Operations**: `HeadObject`, `GetObject`, `PutObject`, `DeleteObject`, `CopyObject`, `DeleteMultipleObjects`, `GetObjectTagging`, `PutObjectTagging`, `DeleteObjectTagging`, `GetObjectAcl`, `PutObjectAcl`, `GetObjectRetention`, `PutObjectRetention`, `GetObjectLegalHold`, `PutObjectLegalHold` +- **Multipart Upload**: `CreateMultipartUpload`, `AbortMultipartUpload`, `CompleteMultipartUpload`, `UploadPart`, `CopyObjectPart`, `ListMultipartUploads`, `ListParts` + +## SeaweedFS Specific / Better Implemented + +- **S3 Tables API (Iceberg Support)**: Extensive support for Iceberg tables, namespaces, and buckets. + - `CreateTableBucket`, `ListTableBuckets`, `GetTableBucket`, `DeleteTableBucket`, `CreateNamespace`, `CreateTable`, etc. +- **Bucket Management**: SeaweedFS implements `PublicAccessBlock` and `OwnershipControls` which are rejected or labeled as dummy in some MinIO versions. + +## MinIO Specific / Not in SeaweedFS + +- **Advanced Object Querying**: `SelectObjectContent`, `GetObjectAttributes`. +- **Extensions**: `GetObjectLambda`, `PostRestoreObject`, `Snowball Extract`. +- **Replication**: MinIO has more native S3 replication APIs. + +## Detailed Comparison Table + +| API Action | SeaweedFS | MinIO | +| :--- | :---: | :---: | +| `s3:GetObject` | ✅ | ✅ | +| `s3:PutObject` | ✅ | ✅ | +| `s3:DeleteObject` | ✅ | ✅ | +| `s3:CopyObject` | ✅ | ✅ | +| `s3:SelectObjectContent` | ❌ | ✅ | +| `s3:GetObjectAttributes` | ❌ | ✅ | +| `s3:PostRestoreObject` | ❌ | ✅ | +| `s3:GetBucketCORS` | ✅ | ✅ | +| `s3:PutBucketCORS` | ✅ | ⚠️ (Dummy) | +| `s3:GetBucketACL` | ✅ | ✅ | +| `s3:PutBucketACL` | ✅ | ⚠️ (Dummy) | +| `s3:GetBucketLifecycle` | ✅ | ✅ | +| `s3:PutBucketLifecycle` | ✅ | ✅ | +| `s3:GetBucketEncryption` | ✅ | ✅ | +| `s3:GetBucketVersioning` | ✅ | ✅ | +| `s3:GetBucketLocation` | ✅ | ✅ | +| `s3:GetBucketPolicy` | ✅ | ✅ | +| `s3:PutBucketPolicy` | ✅ | ✅ | +| `s3:DeleteBucketPolicy` | ✅ | ✅ | +| `s3:GetBucketObjectLockConfiguration` | ✅ | ✅ | +| `s3:GetBucketTagging` | ✅ | ✅ | +| `s3:PutBucketOwnershipControls` | ✅ | ❌ (Rejected) | +| `s3:GetPublicAccessBlock` | ✅ | ❌ (Rejected) | diff --git a/_Sidebar.md b/_Sidebar.md index 2a393e1..5a6caff 100644 --- a/_Sidebar.md +++ b/_Sidebar.md @@ -70,6 +70,7 @@ ### AWS S3 API * [[Amazon S3 API]] +* [[S3 API Comparison]] * [[S3 Conditional Operations]] * [[S3 CORS]] * [[S3 Object Lock and Retention]]