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
- 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.