= 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, present agenda** (~5 min)
* Discuss Focus Areas
** 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.)
** 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!''
** For each proposition [add etherpad link here]
*** Decides whether there is (mostly) agreement or disagreement and the proposition(s).
*** Decide whether there is more need for discussion on the topic, and how urgent or important that is.
*** Identify any open questions that need answering from others, and from who (product, ops, etc)
*** Decides who will drive the further discussion/decision process (ie: a four month deadline)
* Discuss additional strategy questions [add etherpad link here]. For each question:
** Decide whether it is considered important.
** Discuss who should answer it.
** Decide who will follow up on it.
* **Wrap up**
= 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
= 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]]
* 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]]
* 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:
[] Add more details to this task description.
[] Coordinate any pre-event discussions (here on Phab, IRC, email, hangout, etc).
[] 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:
* ...