2015.07.01 Course Blocks and Navigation API

Attendees: Nimisha (presenter), Peter Pinch, Matt Drayer, Andy Armstrong, Piotr Mitros, Miki Goyal, Mark Haseltine, Dave Ormsbee (remote), Will Daly (remote), Jim Abramson (remote), Cale Pennington (remote), Steve Magoun

 

Meta: edx needs an API roadmap - what APIs do we want, what are they for, which ones have been built

  • Will be hugely valuable for us and our community
  • Matt tasked with this

 

Discussion:

  • Course API
    • Course Structure API for insights to extract information
      • Analytics needs access to blocks that no longer exist (think version control)
    • Instructor vs Student scope
      • Scope “feels weird"
      • Can scoping be handled via query?
    • Proposal gives multiple pathways through the course
      • Return all pathways vs 1 pathway - do they need different APIs / are they different resources?
    • Concern about top-level resources based on expected usage:
      • A researcher might want to use an /instructors endpoint.
      • Will we put other types of data (not course structure) underneath the /instructor API?
      • Consensus is that use-case-based resources are not what we want
    • Alternate proposal
      • Top-level /courses endpoint, which returns user’s view with optional filtering
      • Default path would be set to most used endpoint. Pick one for now
      • Use filter parameters to allow caller to choose how they get data - 1 path? all paths?
      • Implementation also has to use permissions to filter what the caller sees
  • Course Blocks
    • If you call this API and (1) we don’t know the content yet (because it’s dynamic) or (2) the content the hasn’t been published yet, do we tell the user?
  • User-specific Content
    • Becomes more complicated as edX matures - for example adaptive learning
    • Search already handles searching of A/B content and cohort-aware content. Should the system should be consistent in its behavior across search, course API?
      • Cohort visibility can be pre-calculated, stored in relational table
      • How do we deal with randomized and other content?
    • Nimisha working with Cale, others on a performant implementation
  • Student Views
    • has_responsive_ui decorator
      • Cale: want a more generic decorator rather than has_responsive_ui decorator. Proposal - XBlock.View property. Concern: do we have to name all properties and targets (“responsive”). Response: The decorator states that the view is responsive.
      • What are best-practices around returning content - should we return all content to the client and let the client figure out what to render? Should we limit what we send based on the client?
      • This decorator seems like an interim thing - assumption is that everything will be responsive in the future
      • Consideration: touch-enabled vs requires a keyboard.
      • Proposal: Create new Learner View that is modern, assumes responsive/etc; make Student View legacy.
        • Tabled
      • Council advice: we’ve identified multiple attributes we need to care about for mobile. 
        • AI: Nimisha + BrianT to think about what attributes are important - responsive, touch-ready, etc. Document assumptions. Find a way to provide a useful error message “Sorry, this XBlock requires a keyboard”
    • student_view_json
      • Data for native rendering
      • Change to student_data_view (some XBLocks don’t output json)
        • When would we not want JSON? A small handful of cases (RSS)
    • block_url
      • How will it be rendered in the LMS? LMS d/n use iframes. Would prefer to have HTML to embed in the LMS.
      • AI: Andy + Nimisha to follow up on rendering client view in the LMS, with a goal of being able to use the APIs in the LMS
        • Steve: consider talking to Xavier (OpenCraft) too for his experience with rendering XBLocks in other UIs
    • web URL
      • AI: Piotr talk to Lou about rendering browser views in mobile devices
  • Course Navigation
    • Concern about courses with optional content or other “rich” features that should not be exposed to users on mobile devices through primary course navigation path. Needs further discussion. One option is to wrap rich content in a wrapper
      • AI: Nimisha, Piotr, product to define use cases for rich content
  • APIs
    • /api/courses/v1/{course_id{/navigation/ - how do you tell the API where you are?
    • navigation ad block endpoints are semantically different but implemented the same way
    • Do we want to allow specifying a particular block to start from, to show subtrees?
      • McKinsey use case
    • Can we collapse the course/blocks endpoint into XBlock API endpoint: drop course, and just pass in xblock as starting point
      • Having distinction of course is helpful for human contemplation of the API
    • Navigation is course-specific
    • AI: Nimisha, Matt, Andy to flesh out API endpoints