2015.11.18 API Gateway Goals

2015.11.18 API Gateway Goals

Action Items:

Matt and/or Cale will experiment with using a repo of Swagger specs as a collaboration medium
Matt will clarify the list of stakeholders
Matt will finish the survey of all the IDAs


  • In room: Matt Drayer, Steve McGoun, Gabe, Joel, Peter Pinch, Miki, Piotr, Nimisha, Robert Raposa, Mark Haseltine, Jim Abramson, Cale, Ned, Chris Dodge, Scott Dunn

  • On Hangouts: Felipe, Vishal

  • API project overview:

    • Many attempts so far

    • More stakeholders now

  • API Goals and Requirements

    • shareable with the world via Open edX

      • as distinct from edx.org?

      • yes, at least some of these endpoints will be served by edx.org

    • adhere to edX REST api conventions

    • Stakeholders

      • why are mobile apps called out specially?

        • they have unusual needs

        • their needs has to be accounted for in all APIs.

        • Why "edX mobile apps", rather than just "mobile apps"

      • is it a goal to allow different adopters to enable/disable different endpoints?

        • that could be a feature?

      • what about internal use of the API?

        • case in point: course discovery

        • provides information to external integrations

        • also needs to get information from a bunch of edx services

  • Some API use cases

    • lots of consumers want to show a list of courses

    • other consumers have other needs

    • mcka has many many needs

  • The System

    • what is the system?

    • we have repos that are not made public as open edx

    • we have public repos that are not part of edx.org

    • the system could be:

      • all the repos, or

      • whatever is installed and running in production, or

      • the LMS

  • Cale proposal: the first thing to standardize on would be the external shell of an Open edX installation.

    • miki: be careful not to narrow down the API to only public-facing things

      • we should follow the same guiding principles for internal things only

    • it would be good if the internal APIs could have things in common with the public APIs.

    • nimisha: we aren't the only ones writing IDAs

      • we want to have consistency across their APIs.

    • mark: do we need to solve the internal APIs in parallel with the public APIs, or do they have to be bundled together?

    • ed: things we use work better for others than things that we don't use.

    • cale: lots of the things in the public api are things we want internally

    • cale: github doesn't use its public API facade to implement its browser interface, and that isn't crazy.

    • it was never intended that internal people *had* to use the public API

  • piotr: understanding how xblocks fit into this API will be important.

    • as an author of an xblock, i want to be able to define my own API, not have edX define it.

    • similarly for lots of course-content endpoints

    • some endpoints will be implemented by the system, while others will depend on having the xblock installed.

    • the goal is to allow for new xblocks to be written and be first-class citizens

  • the endpoints in the proposal so far just reflect the existing system

  • nimisha: how will this be extended?

    • matt doesn't want to be the bottleneck in the future

  • mark: this API is for external integrators

  • API design will be based on usual REST principals

    • Matt is sticking to a tight style

    • the current endpoint list needs to be de-duplicated a bit

    • relationships can be two way (courses for a user, users for a course

    • cale: edX REST conventions say flat?

      • nimisha: it says, "not *too* nested"

      • would we be better off having a name for the relationship ("enrollment"), or not?

      • matt: if the relationship has its own attributes, name it. but don't if we don't have to.

    • more than two related things leads to a combinatorial explosion

  • How do we decide who is a reasonable client of this API?

  • Gabe: maybe we should have a guideline for what the resources are, and that would guide us.

  • Nimisha: lots of things to consider: security, performance, etc.

  • jim: are we starting with what we have, or are we building something new?

    • the goal is to define the coherent end state.

    • then we can decide how to get to that state

    • existing APIs will be looked at

  • cale: we should get the other IDAs into the endpoint list to get all perspectives

  • is the wiki page the right tool for the discussion?

    • matt tried swagger, but it's not collaborative

    • cale: maybe a repo full of swagger definitions of an API?

  • Do we agree on the stakeholders for this API?

    Yes, generalize the statement to "anyone wanting to integrate with Open edX"
  • Do we understand the scope/context of the API?

    • "External parties to integrate with an Open edX installation"

    • mark: external means they go through rate limiters, etc. trusted vs untrusted

    • because we are open-source, even "internal" APIs have to think about backward compatibility.

  • miki: when we are done, will we be able to build edx.org on the public API? Is that a goal

    • matt: that is not a goal for this work, but it could be extended to do that.

  • we agree that this should be a RESTful API.

    • piotr: "loosely"

    • matt: as tight as I can make it.