Add S3 API Comparison page and update sidebar

Chris Lu
2026-02-19 17:42:01 -08:00
parent ea4c55a6ec
commit f58b57ec84
2 changed files with 70 additions and 0 deletions
+69
@@ -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) |
+1
@@ -70,6 +70,7 @@
### AWS S3 API
* [[Amazon S3 API]]
* [[S3 API Comparison]]
* [[S3 Conditional Operations]]
* [[S3 CORS]]
* [[S3 Object Lock and Retention]]