garage-webui/docs/api-upgrade-report.md
Adekabang 33ed173dec feat: align API endpoints with official specifications for bucket and key management
- Updated HTTP methods for bucket and key operations to align with the official Garage Admin API v2 specifications, changing DELETE methods to POST where necessary.
- Modified frontend hooks and documentation to reflect these changes, ensuring consistency across the application.
- Completed tasks for verifying and aligning delete operations and reviewing other HTTP methods.
2025-07-31 18:10:39 -04:00

10 KiB

Garage Web UI API Upgrade Report

Upgrade Overview

The Garage Web UI project has been successfully upgraded from Garage Admin API v1 to v2.

⚠️ Implementation Note: This project uses REST-compliant HTTP methods (DELETE for deletions) which may differ from the official Garage Admin API v2 specification. For the authoritative API specification, please refer to https://garagehq.deuxfleurs.fr/api/garage-admin-v2.html.

Upgrade Timeline

  • Completion Date: July 2025
  • Current Version: v1.0.9
  • Scope of Upgrade: All API calls within the frontend React hooks

Upgrade Details

1. Home Page (src/pages/home/hooks.ts)

  • useNodesHealth: /v1/health/v2/GetClusterHealth

2. Cluster Page (src/pages/cluster/hooks.ts)

  • useClusterStatus: /v1/status/v2/GetClusterStatus
  • useClusterLayout: /v1/layout/v2/GetClusterLayout
  • useConnectNode: /v1/connect/v2/ConnectClusterNodes
  • useAssignNode: /v1/layout/v2/UpdateClusterLayout
  • useUnassignNode: /v1/layout/v2/UpdateClusterLayout
  • useRevertChanges: /v1/layout/revert/v2/RevertClusterLayout
  • useApplyChanges: /v1/layout/apply/v2/ApplyClusterLayout

3. Keys Page (src/pages/keys/hooks.ts)

  • useKeys: /v1/key?list/v2/ListKeys
  • useCreateKey: /v1/key/v2/CreateKey
  • useCreateKey (Import): /v1/key/import/v2/ImportKey
  • useRemoveKey: /v1/key/v2/DeleteKey?id={id} (POST method, aligned with official spec)

4. Buckets Page (src/pages/buckets/hooks.ts)

  • useBuckets: Custom /buckets endpoint → /v2/ListBuckets (enhanced with bucket details)
  • useCreateBucket: /v1/bucket/v2/CreateBucket

5. Bucket Management Page (src/pages/buckets/manage/hooks.ts)

  • useBucket: /v1/bucket/v2/GetBucketInfo
  • useUpdateBucket: /v1/bucket/v2/UpdateBucket (POST method)
  • useAddAlias: /v1/bucket/alias/global/v2/AddBucketAlias (POST method)
  • useRemoveAlias: /v1/bucket/alias/global/v2/RemoveBucketAlias (POST method)
  • useAllowKey: /v1/bucket/allow/v2/AllowBucketKey
  • useDenyKey: /v1/bucket/deny/v2/DenyBucketKey
  • useRemoveBucket: /v1/bucket/v2/DeleteBucket?id={id} (POST method, aligned with official spec)

6. Object Browser (src/pages/buckets/manage/browse/hooks.ts)

  • useBrowseObjects: New custom /browse/{bucket} endpoint for S3-compatible object browsing
  • usePutObject: New custom /browse/{bucket}/{key} endpoint for file uploads
  • useDeleteObject: New custom /browse/{bucket}/{key} endpoint for file/folder deletion

7. Authentication (src/pages/auth/hooks.ts and src/hooks/useAuth.ts)

  • useLogin: New custom /auth/login endpoint
  • useAuth: New custom /auth/status endpoint for session management

8. Configuration (src/hooks/useConfig.ts)

  • useConfig: New custom /config endpoint for garage configuration access

Upgrade Statistics

API Endpoint Mapping

Original v1 Endpoint Official v2 Endpoint Implementation Status
/v1/health GET /v2/GetClusterHealth GET /v2/GetClusterHealth
/v1/status GET /v2/GetClusterStatus GET /v2/GetClusterStatus
/v1/layout GET /v2/GetClusterLayout GET /v2/GetClusterLayout
/v1/connect POST /v2/ConnectClusterNodes POST /v2/ConnectClusterNodes
/v1/layout (POST) POST /v2/UpdateClusterLayout POST /v2/UpdateClusterLayout
/v1/layout/revert POST /v2/RevertClusterLayout POST /v2/RevertClusterLayout
/v1/layout/apply POST /v2/ApplyClusterLayout POST /v2/ApplyClusterLayout
/v1/key?list GET /v2/ListKeys GET /v2/ListKeys
/v1/key (POST) POST /v2/CreateKey POST /v2/CreateKey
/v1/key/import POST /v2/ImportKey POST /v2/ImportKey
/v1/key (DELETE) POST /v2/DeleteKey?id={id} POST /v2/DeleteKey?id={id}
/buckets GET /v2/ListBuckets GET /v2/ListBuckets
/v1/bucket (POST) POST /v2/CreateBucket POST /v2/CreateBucket
/v1/bucket (GET) GET /v2/GetBucketInfo GET /v2/GetBucketInfo
/v1/bucket (PUT) POST /v2/UpdateBucket POST /v2/UpdateBucket
/v1/bucket (DELETE) POST /v2/DeleteBucket?id={id} POST /v2/DeleteBucket?id={id}
/v1/bucket/alias/global (PUT) POST /v2/AddBucketAlias POST /v2/AddBucketAlias
/v1/bucket/alias/global (DELETE) POST /v2/RemoveBucketAlias POST /v2/RemoveBucketAlias
/v1/bucket/allow POST /v2/AllowBucketKey POST /v2/AllowBucketKey
/v1/bucket/deny POST /v2/DenyBucketKey POST /v2/DenyBucketKey

Note: "Official" refers to the Garage Admin API v2 specification, "Impl" refers to the Garage Web UI implementation which may use more REST-compliant HTTP methods.

Custom Backend Endpoints

In addition to the standard Garage Admin API v2 endpoints, the Garage Web UI implements several custom backend endpoints for enhanced functionality:

Endpoint HTTP Method Purpose Status
/config GET Get garage configuration
/auth/login POST User authentication
/auth/logout POST User logout
/auth/status GET Authentication status
/buckets GET Enhanced bucket listing with details
/browse/{bucket} GET Browse bucket objects
/browse/{bucket}/{key...} GET View/download object
/browse/{bucket}/{key...} PUT Upload object
/browse/{bucket}/{key...} DELETE Delete object/folder

Upgrade Count

  • Total Standard v2 Endpoints Implemented: 18
  • Custom Backend Endpoints: 9
  • Total API Endpoints: 27
  • Successfully Upgraded: 18 (100% of planned v1→v2 migrations)
  • Custom Features Added: 9 (Object browsing, authentication, enhanced bucket listing)
  • Number of Files Upgraded: 5 TypeScript hook files + 1 backend router

Backend Compatibility

No Backend Modifications Required:

  • The backend uses a reverse proxy (ProxyHandler) to directly forward API requests to the Garage Admin API.
  • All v2 API requests are automatically forwarded to the correct Garage Admin endpoints.
  • No changes to the Go backend code were necessary.

Build Verification

Build Successful:

  • TypeScript compilation passed.
  • Vite bundling was successful.
  • No compilation errors.
  • Docker build working properly.

Code Quality:

  • ESLint warnings have been addressed.
  • Type definitions have been optimized.
  • All hooks properly typed with TypeScript interfaces.

New Feature Availability

After upgrading to the v2 API, the project now utilizes the following enhanced features:

Enhanced Cluster Management

  • More detailed cluster health status information via /v2/GetClusterHealth
  • Improved layout management operations with /v2/UpdateClusterLayout
  • Better node connection handling through /v2/ConnectClusterNodes

Enhanced Key Management

  • Support for more key types through /v2/CreateKey
  • Improved permission management with /v2/AllowBucketKey and /v2/DenyBucketKey
  • Better key import functionality via /v2/ImportKey

Enhanced Bucket Management

  • Richer bucket metadata from /v2/GetBucketInfo
  • Improved alias management with /v2/AddBucketAlias and /v2/RemoveBucketAlias
  • Finer-grained permission control through updated permission APIs

Production Status

Production Ready:

  1. Type Definition Optimization: All any types have been replaced with specific interface definitions.
  2. Functional Testing: All upgraded features tested and working in production.
  3. Documentation Update: Project documentation updated to reflect the use of the v2 API.
  4. Error Handling: Error handling logic adjusted for the v2 API's response format.

Future Enhancement Opportunities

  1. Additional v2 Features: Implement newly available v2 API features such as:
    • Admin token management (/v2/CreateAdminToken, /v2/ListAdminTokens)
    • Enhanced node monitoring (/v2/GetNodeInfo, /v2/GetNodeStatistics)
    • Block management and repair tools (/v2/GetBlockInfo, /v2/LaunchRepairOperation)
  2. User Experience: Continue improving the UI for mobile devices and add real-time updates.
  3. Monitoring Integration: Enhanced Prometheus metrics visualization.
  4. Bulk Operations: Support for bulk management of buckets and access keys.

Risk Assessment

Production Stable

  • API path upgrade completed successfully.
  • No compilation errors.
  • Excellent backend compatibility.
  • All features tested and working.

Features Fully Operational

  • All upgraded API endpoints working correctly.
  • Error response handling optimized.
  • API parameter formats fully compatible.

Rollback Plan

To roll back to the v1 API if necessary:

  1. Restore the API paths in all hook files.
  2. Ensure the Garage server supports the v1 API.
  3. Recompile and redeploy.

Upgrade Complete: The Garage Web UI has been successfully upgraded to Garage Admin API v2 and is currently running in production with enhanced functionality and better performance.