Fetching contributors…
Cannot retrieve contributors at this time
62 lines (57 sloc) 2.48 KB


Note: Initially only the GET requests which are accessible from the Public scope will be implemented. Later the ability to use other scopes will be supported.

  1. Add test automation
    1. Make requests testable
    2. Test calls to API endpoints
    3. Increase code coverage
  2. Add support to use as a dependency
    1. CocoaPods
    2. Carthage
    3. SwiftPM (Swift Package Manager)
  3. Implement full API
    1. /v3/oauth
    2. Implement secure access data storage
    3. /v3/athlete
    4. /v3/athletes/:id
    5. /v3/athlete/activities/
    6. /v3/activities/:id
    7. /v3/activities/following
    8. /v3/clubs/:id
    9. /v3/athlete/clubs
    10. /v3/segments/:id
    11. /v3/segments/:id/leaderboard
    12. /v3/segments/starred
    13. /v3/segments/:id/all_efforts
    14. /v3/uploads
    15. Add support for paging for all paged resources
    16. Implement error handling by checking error on JSON response
    17. Support date string convertion to date object (ISO 8601 formatted)
    18. Review for compliance with models and Strava docs for all properties and types
    19. Define policy for types such as polylines, dates and non-optional properties
  4. Implement full demo app (live integration testing)
    1. /v3/oauth
    2. /v3/athlete
    3. /v3/athletes/:id
    4. /v3/athlete/activities/
    5. /v3/activities/:id
    6. /v3/activities/following
    7. /v3/clubs/:id
    8. /v3/athlete/clubs
    9. /v3/segments/:id
    10. /v3/segments/:id/leaderboard
    11. /v3/segments/starred
    12. /v3/segments/:id/all_efforts
    13. /v3/athlete/zones
    14. /v3/uploads
  5. Review performance
    1. Implement rate limiting support
    2. Profile API calls for various calls
    3. Plan and implement retry logic for rating limiting
  6. Plan work to store data to disk
    1. Generic data store protocol
    2. JSON implementation
    3. sqlite implementation
    4. Realm implementation


Rating Limiting has reasonable settings for moderate use. It will be necessary to detect when a 403 Forbidden response is returned with the JSON payload indicating that the rate limit was exceeded. When that happens the current failed request can detect the state, wait a moment and try the request again. The delay could be 1 second initially and increase with each failed request. A maximum retry count of 5 or 10 may be reasonable to provide the best possible user experience.