= Session Themes and Topics=
* Theme: Increasing our technical capabilities to achieve our strategy
* Topic: APIs (+asset delivery)
=Session Leaders=
* Gergő Tisza (@Tgr)
=Facilitator=
* @TheDJ
=Description=
This session will delve into the action API, REST API, and any alternative solutions to answer open questions so that the API architecture can be resolved.
=Questions to answer during this session=
|**Question**|**Significance: Why is this question important? What is blocked by it remaining unanswered? **
|What are the use cases and requirements (client, infrastructure and platform) for Wikimedia and MediaWiki APIs? //(This is expected to just summarize input from other sources - most notably T206072, T206059 and ops)// |This blocks answering the main question - the choice of technology must be guided by stakeholder needs. The answers should mostly come from other sessions ([[ https://phabricator.wikimedia.org/T206059 | Determining use cases and requirements for the APIs that we build, Choosing installation methods and environments for 3rd party users ]]) and are just restated at the beginning of the session.
|Take stock of the API frameworks (existing ones & promising alternatives, if any). What are their strengths and weaknesses? Which use cases and requirements can they effectively fulfill, and which not? What are their infrastructure needs and costs? |This blocks answering the main question - to make an informed choice we must have an informed understanding of each option.
|What should the future of our APIs look like? Should we standardize on a single framework? (Which one?) Or should we aim for a microservice infrastructure with full freedom of implementation? What of the legacy API modules? What of the “custom” APIs like ORES or WDQS? |The answer to this question determines how investment into API development in the next several years should look like.
|Given the above, what is the impact on caching infrastructure and storage infrastructure? |It is important to consider the implications of the API choice upon the architecture
= Facilitator and Scribe notes =
* https://docs.google.com/document/d/1q9ATHXdR-KPZdjYaq8q2kwRC9wAhCTdmBjR4i3Z3aF4
= Facilitator reminders =
* https://www.mediawiki.org/wiki/Wikimedia_Technical_Conference/2018/Session_Guide#Session_Guidance_for_facilitators
= Session Structure =
* **Define session scope, clarify desired outcomes,# 13:30 - 13:40: Opening present agenda** (~5 min)ation
* Discuss Focus Areas#* Intro and context
** Present information on use cases and requirements (~20 min; in [[https://www.mediawiki.org/wiki/Wikimedia_Technical_Conference/2018/Session_Guide#Station_Rotation|station rotation]] format - depends on availability, but ideally with separate groups for user-facing clients, bots & tools, platform/portability restrictions and ops. Maybe split the first into web/apps.)#* Session structure
** Discuss strengths, weaknesses and costs of the different API frameworks (~15 min;
** Discuss and Adjust. ''Note that we are not trying to come to a final agreement, we are just prioritizing and assigning responsibilities!''#* Clarify desired outcomes
#* Present information from previous sessions
** For each proposition [add etherpad link here]# 13:40 - 13:45: Break into random groups of 6-10 people
*** Decides whether there is (mostly) agreement or disagreement and the proposition(s).# 13:45 - 13:50: Discuss use cases
*** Decide whether there is more need for d# 13:50 - 14:00: Discussion on the topic, strengths and how urgent or important that is.weaknesses of existing frameworks
*** Identify any open questions t# 14:00 - 14:15: Discuss what need answering from others, and from who (product, ops, etc)the new framework (frameworks?) should be
*** Decides who will drive the further d# 14:15 - 14:20: Discussion/decision process (ie: a four month deadline) infrastructure impacts
* Discuss additional strategy questions [add etherpad link here].# 14:20 - 14:30: Swap half of the groups, For each question:compare results
For steps 5 and 6:
*** Decide whether itthere is considered important.(mostly) agreement or disagreement
** D* Decide whether there is more need for discuss who should answer ition on the topic, and how urgent or important that is.
** Decide who will follow up on it.* Identify any open questions that need answering from others, and from who (product, ops, etc)
* **Wrap up*** Decide who will drive the further discussion/decision process (ie: a four month deadline)
= Session Dependencies: =
* {T206072} - should inform what the API use cases and requirements are
* {T206059} - should inform what the platform compatibility requirements are
* {T206068} - might inform what technical choices are available for APIs which use internal or external cache; might be informed by API technology choices if the dependency tracking system is itself an API
* {T206082} - should be informed on which APIs should be standalone services
* {T206080} - should be informed on what need (if any) APIs have to share code components with MediaWiki (e.g. same DB abstraction layer)
= Resources: =
* [[https://www.mediawiki.org/wiki/Requests_for_comment/Services_and_narrow_interfaces|Services and narrow interfaces RfC]]
* Audiences position statement: [[https://www.mediawiki.org/wiki/Wikimedia_Audiences/Needs_from_APIs|Needs from APIs]]
* Platform team position statement: [[https://www.mediawiki.org/wiki/MediaWiki_Platform_team/Simplifying_the_Wikimedia_Foundation_technology_stack|Simplifying the Wikimedia Foundation technology stack]]
* [[https://www.mediawiki.org/wiki/Wikimedia_Technical_Committee/MediaWiki_Platform_Architecture_Principles|MediaWiki Platform (draft) Architecture Principles]]
* Sessions from previous conferences:
** T183313#3930040 DevSummit 2018: Evolving the MediaWiki Architecture
* API docs:
** [[https://www.mediawiki.org/wiki/API:Main_page|Action API documentation]]
** [[https://www.mediawiki.org/wiki/REST_API|REST API documentation]] (see also: [[https://www.mediawiki.org/wiki/RESTBase/Alternative_architectural_options_considered|alternative implementation plans]] back in 2014)
** Other APIs:
*** [[https://www.mediawiki.org/wiki/Manual:Thumb.php|thumb.php]] (see also {T66214})
*** [[https://www.mediawiki.org/wiki/Manual:Opensearch_desc.php|opensearch_desc.php]]
*** [[https://www.wikidata.org/wiki/Wikidata:Data_access#Linked_Data_interface|Wikibase Linked Data]]?
*** [[https://www.mediawiki.org/wiki/Wikidata_Query_Service|Wikidata Query Service]]
*** [[https://www.mediawiki.org/wiki/ORES|ORES]]
** [[https://graphql.org/|GraphQL]]
** [[https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md|OpenAPI]]
* RfCs / proposals for new APIs:
** [[https://www.mediawiki.org/wiki/Requests_for_comment/Storage_service|Storage service]] / [[https://www.mediawiki.org/wiki/Requests_for_comment/Content_API|Content API]] (most but not all of that got implemented in RESTBase)
** {T66214}
** {T111588}
** {T114596}
** {T130663}
** {T140813} and {T206010}
= Related tasks: =
----
**Session Leaders** please:
[x] Add more details to this task description.
[] Coordinate any pre-event discussions (here on Phab, IRC, email, hangout, etc).
[x] Outline the plan for discussing this topic at the event.
[] Optionally, include what it will //not// try to solve.
[] Update this task with summaries of any pre-event discussions.
[] Include ways for people not attending to be involved in discussions before the event and afterwards.
----
Post-event Summary:
* ...
Action items:
* ...