REST API Conversion Analysis & Estimates

Overview

This document outlines the conversion of non-RESTful endpoints to proper REST API standards, including time estimates for each endpoint. The conversion will improve API consistency, maintainability, and adherence to REST principles.

Current vs. Proposed REST Endpoint Mapping

1 Low Complexity
Current: GET /api/find/{collection}
Proposed: GET /api/{collection}
Changes Required:
  • Backend: Update route definition, controller method remains similar
  • Frontend: Update OnlineCrudService.find() method to use new endpoint
  • Testing: Update all service tests

Estimate: 2-3 hours

• Backend route update: 30 minutes
• Frontend service update: 30 minutes
• Testing & validation: 1-2 hours
2 Low Complexity
Current: GET /api/find-by-id/{collection}/{id}
Proposed: GET /api/{collection}/{id}
Changes Required:
  • Backend: Update route definition, controller method remains similar
  • Frontend: Update OnlineCrudService.findById() method
  • Testing: Update all service tests

Estimate: 2-3 hours

• Backend route update: 30 minutes
• Frontend service update: 30 minutes
• Testing & validation: 1-2 hours
3 Medium Complexity
Current: GET /api/find-by-user-id/{collection}/{userId}
Proposed: GET /api/{collection}?user_id={userId}
Alternative: GET /api/{collection}/user/{userId} (if user_id is a resource identifier)
Changes Required:
  • Backend: Update route to accept query parameters, modify controller to filter by user_id
  • Frontend: Update service methods that use this endpoint (e.g., UserDetailsService.findByUserId())
  • Testing: Test query parameter filtering

Estimate: 3-4 hours

• Backend route & controller update: 1 hour
• Frontend service update: 1 hour
• Testing & validation: 1-2 hours
4 Medium Complexity
Current: GET /api/find-by-value/{collection}/{name}/{value}
Proposed: GET /api/{collection}?{name}={value}
Changes Required:
  • Backend: Update route to accept query parameters, modify controller to handle dynamic field filtering
  • Frontend: Update OnlineCrudService.findByValue() method to build query string
  • Testing: Test various field/value combinations

Estimate: 4-5 hours

• Backend route & controller update: 1.5 hours
• Frontend service update: 1 hour
• Testing & validation: 1.5-2 hours
5 Medium-High Complexity
Current: POST /api/find-by-value-set/{collection} (with body containing field name and array of values)
Option A: POST /api/{collection}/search Recommended
Option B: GET /api/{collection}?{name}[]={value1}&{name}[]={value2}
Changes Required:
  • Backend: Create new search endpoint, handle array filtering in controller
  • Frontend: Update OnlineCrudService.findByValue() method when value is List
  • Testing: Test array filtering with various collections

Estimate: 5-6 hours

• Backend route & controller update: 2 hours
• Frontend service update: 1 hour
• Testing & validation: 2-3 hours
6 Medium Complexity
Current: PUT /api/put/{collection} (with id in body)
Proposed: PUT /api/{collection}/{id} (id in URL path)
Changes Required:
  • Backend: Update route to include {id} parameter, extract id from URL instead of body
  • Frontend: Update OnlineCrudService.save() method to include id in URL when updating
  • Testing: Test update operations

Estimate: 3-4 hours

• Backend route & controller update: 1 hour
• Frontend service update: 1 hour
• Testing & validation: 1-2 hours
7 Low Complexity
Current: DELETE /api/delete/{collection}/{id}
Proposed: DELETE /api/{collection}/{id}
Changes Required:
  • Backend: Update route definition, controller method remains similar
  • Frontend: Update OnlineCrudService.delete() method
  • Testing: Update all delete operations

Estimate: 2-3 hours

• Backend route update: 30 minutes
• Frontend service update: 30 minutes
• Testing & validation: 1-2 hours
8 Medium Complexity
Current: POST /api/delete-link-table/{collection} (with link data in body)
Option A: DELETE /api/{collection}/links Recommended
Option B: POST /api/{collection}/links/delete (if DELETE with body is not supported)
Changes Required:
  • Backend: Update route, modify controller to handle link deletion
  • Frontend: Update OnlineCrudService.deleteFromLinkTable() method
  • Testing: Test link table deletion operations

Estimate: 3-4 hours

• Backend route & controller update: 1 hour
• Frontend service update: 1 hour
• Testing & validation: 1-2 hours
9 Low-Medium Complexity
Current: POST /api/post-link-table/{collection}
Proposed: POST /api/{collection}/links
Changes Required:
  • Backend: Update route definition, controller method remains similar
  • Frontend: Update OnlineCrudService.saveToLinkTable() method
  • Testing: Test link table creation operations

Estimate: 2-3 hours

• Backend route update: 30 minutes
• Frontend service update: 30 minutes
• Testing & validation: 1-2 hours
10 Low Complexity
Current: POST /api/post/{collection}
Proposed: POST /api/{collection}
Changes Required:
  • Backend: Update route definition, controller method remains similar
  • Frontend: Update OnlineCrudService.save() method (create operation)
  • Testing: Test create operations

Estimate: 2-3 hours

• Backend route update: 30 minutes
• Frontend service update: 30 minutes
• Testing & validation: 1-2 hours
11 Medium Complexity
Current: POST /api/uploadFile/{key} (multipart form data)
Option A: POST /api/files/upload Recommended
Option B: POST /api/{collection}/files (collection-specific uploads)
Changes Required:
  • Backend: Update route, ensure file handling logic remains intact
  • Frontend: Update HttpService.postFile() method
  • Testing: Test file uploads for all file types

Estimate: 3-4 hours

• Backend route update: 1 hour
• Frontend service update: 1 hour
• Testing & validation: 1-2 hours

Summary

Total Estimated Time: 31-40 hours

Breakdown by Complexity:

Implementation Phases:

Phase 1: Simple CRUD Operations (8-10 hours)

  • find/{collection}GET /api/{collection}
  • find-by-id/{collection}/{id}GET /api/{collection}/{id}
  • delete/{collection}/{id}DELETE /api/{collection}/{id}
  • post/{collection}POST /api/{collection}
  • post-link-table/{collection}POST /api/{collection}/links

Phase 2: Update & Query Operations (10-12 hours)

  • put/{collection}PUT /api/{collection}/{id}
  • find-by-user-id/{collection}/{userId}GET /api/{collection}?user_id={userId}
  • find-by-value/{collection}/{name}/{value}GET /api/{collection}?{name}={value}
  • delete-link-table/{collection}DELETE /api/{collection}/links

Phase 3: Advanced Operations (8-10 hours)

  • find-by-value-set/{collection}POST /api/{collection}/search
  • uploadFile/{key}POST /api/files/upload

Additional Considerations

  1. Backward Compatibility: Consider maintaining old endpoints during transition period (add deprecation warnings)
  2. API Versioning: May want to implement /api/v1/{collection} for future-proofing
  3. Error Handling: Ensure consistent error response format across all endpoints
  4. Rate Limiting: Verify rate limiting works with new endpoint structure
  5. Documentation: Update API documentation for all endpoints
  6. Testing: Comprehensive testing required for all collections using these endpoints

Files to Modify

Backend (PHP/CodeIgniter):

Frontend (Flutter/Dart):

Risk Factors

Endpoint Conversion Summary Table

# Method Current Endpoint Proposed Endpoint Complexity Estimate (Hours) Phase
1 GET find/{collection} {collection} Low 2-3 Phase 1
2 GET find-by-id/{collection}/{id} {collection}/{id} Low 2-3 Phase 1
3 GET find-by-user-id/{collection}/{userId} {collection}?user_id={userId} Medium 3-4 Phase 2
4 GET find-by-value/{collection}/{name}/{value} {collection}?{name}={value} Medium 4-5 Phase 2
5 POST find-by-value-set/{collection} {collection}/search High 5-6 Phase 3
6 PUT put/{collection} {collection}/{id} Medium 3-4 Phase 2
7 DELETE delete/{collection}/{id} {collection}/{id} Low 2-3 Phase 1
8 DELETE delete-link-table/{collection} {collection}/links Medium 3-4 Phase 2
9 POST post-link-table/{collection} {collection}/links Low 2-3 Phase 1
10 POST post/{collection} {collection} Low 2-3 Phase 1
11 POST uploadFile/{key} files/upload Medium 3-4 Phase 3
Total Estimated Time: 31-40 hours

Summary Statistics

5
Low Complexity Endpoints
10-15 hours
5
Medium Complexity Endpoints
18-23 hours
1
High Complexity Endpoint
5-6 hours
11
Total Endpoints
31-40 hours