Fandom Developers Wiki
m (fix link)
(switching to an endpoint that exists on UCP)
(23 intermediate revisions by 14 users not shown)
Line 1: Line 1:
  +
{{tocright}}
This is the name of the new Wikia application framework.
 
  +
'''Nirvana''' is the name of Fandom's application framework. In the most basic sense, it consists of controllers and templates these controllers are rendering. Some controllers and their public methods can be accessed through <code>/wikia.php</code> or <code>/api/v1</code> on every Fandom wiki.
   
==Introduction==
+
== Endpoints ==
  +
=== <code>/wikia.php</code> ===
The Quick Start Guide has a summary of example usage for the most common functions in the framework.
 
  +
Script for accessing methods of any class extending <code>WikiaController</code> that allows external requests. Accepts two arguments as query string parameters:
*[[Nirvana/Quick Start Guide|Quick Start Guide]]
 
  +
* <code>controller</code> — Controller to access. If the class name of the controller is <code>SomethingController</code>, this field accepts both <code>Something</code> and <code>SomethingController</code> in order to access it.
*[[Creating_Extensions|Creating Extensions]]
 
  +
* <code>method</code> — Public method to access. Defaults to <code>index</code>. Case-insensitive due to PHP method name case-insensitivity.
*[[github:Wikia/app/tree/dev/extensions/wikia/templates|Hello World Example]]
 
  +
* <code>format</code> — Can be set to [[wikipedia:JSON|<code>json</code>]] or [[wikipedia:HTML|<code>html</code>]]. Default is <code>html</code>, but methods with no templates associated just return data as JSON.
*[[Nirvana/Unit Testing|Unit Testing]]
 
  +
For example, [{{SERVER}}/wikia.php?controller=UserApi&method=getUsersByName&query=KockaAdmiralac&format=json <code>/wikia.php?controller=UserApi&method=getUsersByName&query=KockaAdmiralac&format=json</code>] calls the [[github:Wikia/app/blob/dev/includes/wikia/api/UserApiController.class.php#L96-L142|<code>getUsersByName</code> method of the <code>UserApi</code> class]] and requests that the data is returned as JSON.
*[[Nirvana/JavaScript|JavaScript helper functions]]
 
   
  +
=== <code>/api/v1</code> ===
  +
Can access only a subset of externally accessible controllers. Accessible controllers are those whose names end with <code>ApiController</code> with public method names starting with <code>get</code>. Always returns data as JSON. For example, [{{SERVER}}/api/v1/User/Details?ids=KockaAdmiralac <code>/api/v1/Users/Details?ids=KockaAdmiralac</code>] accesses the [[github:Wikia/app/blob/dev/includes/wikia/api/UserApiController.class.php#L31-L87|<code>getDetails</code> method of the <code>UserApiController</code> class]].
   
  +
Controllers accessible through <code>/api/v1</code> often have their parameters and responses documented [{{SERVER}}/api/v1 on the same page], with their documentation auto-generated by [https://swagger.io Swagger.] Some controllers, such as the [[github:Wikia/app/blob/dev/includes/wikia/api/WikisApiController.class.php|<code>WikisApiController</code>]], are only accessible from [[w:|Community Central]].
==Nirvana Framework reference==
 
This section documents each object in the framework.
 
*[[Nirvana/WikiaApp|WikiaApp]]
 
*[[Nirvana/WikiaSuperFactory|WikiaSuperFactory]]
 
*[[Nirvana/WikiaController|WikiaController]]
 
*[[Nirvana/WikiaService|WikiaService]]
 
*[[Nirvana/WikiaObject|WikiaObject]]
 
*[[Nirvana/WikiaModel|WikiaModel]]
 
*[[Nirvana/WikiaSpecialPageController|WikiaSpecialPageController]]
 
*[[Nirvana/WikiaRequest|WikiaRequest]]
 
*[[Nirvana/WikiaResponse|WikiaResponse]]
 
*[[Nirvana/WikiaException|WikiaException]]
 
*[[Nirvana/WikiaView|WikiaView]]
 
   
  +
== Available controllers ==
The following classes are internal and should not be used directly
 
  +
There are many Nirvana controllers available, but only a few of them are properly documented. The easiest way to find them is to [[github:Wikia/app/find/dev|use the file search option in Fandom's MediaWiki code repository]] and search for <code>Controller.class.php</code>. If you are unsure about how a controller can be used, feel free to leave a message on {{SITENAME}}'s [[Board:API Discussion|API Discussion board]], and other users who worked with Nirvana controllers in past may be able to help you.
*[[Nirvana/WikiaRegistry|WikiaRegistry]]
 
*[[Nirvana/WikiaDispatcher|WikiaDispatcher]]
 
*[[Nirvana/WikiaHookDispatcher|WikiaHookDispatcher]]
 
*[[Nirvana/WikiaFunctionWrapper|WikiaFunctionWrapper]]
 
   
  +
== Definitions ==
Articles that contain performance information, structure, documentation, etc for Nirvana should be in Category:Nirvana, which will be picked up below.
 
  +
These classes are used within the Nirvana framework.
  +
; <code>WikiaApp</code>
  +
: Wrapper for many common operations, such as hooks registration and getting access to global variables.
  +
; <code>WikiaController</code>
  +
: Wraps queries and data related logic into functions for the front end.
  +
: Can be accessed through <code>/wikia.php</code> or <code>/api/v1</code> endpoints.
  +
; <code>WikiaException</code>
  +
: The exception class typically thrown by Nirvana controllers.
  +
; <code>WikiaModel</code>
  +
: Abstract class for other helper classes with methods for database access.
  +
; <code>WikiaObject</code>
  +
: Abstract class extended by non-controllers that still need framework variables.
  +
; <code>WikiaRequest</code>
  +
: An incomplete replacement for MediaWiki's <code>[[mw:Manual:WebRequest.php|WebRequest]]</code> class.
  +
; <code>WikiaResponse</code>
  +
: Used for passing data between controllers and templates.
  +
: Any variables set in the response are in the JSON response of the controller.
  +
; <code>WikiaService</code>
  +
: Class for controllers that cannot be accessed externally.
  +
; <code>WikiaSpecialPageController</code>
  +
: Class for controllers used for controlling [[Special:SpecialPages|special page]] features.
  +
; <code>WikiaView</code>
  +
: Class representing a template.
   
==Related Articles==
+
== See also ==
  +
* [[github:Wikia/app/tree/dev/includes/wikia/nirvana|Nirvana in Fandom's MediaWiki code repository]].
   
 
[[Category:Guides]]
<categorytree mode="pages" hideroot="on" showcount="on">Nirvana</categorytree>
 
[[Category:Nirvana]]
 

Revision as of 01:42, 27 September 2021

Nirvana is the name of Fandom's application framework. In the most basic sense, it consists of controllers and templates these controllers are rendering. Some controllers and their public methods can be accessed through /wikia.php or /api/v1 on every Fandom wiki.

Endpoints

/wikia.php

Script for accessing methods of any class extending WikiaController that allows external requests. Accepts two arguments as query string parameters:

  • controller — Controller to access. If the class name of the controller is SomethingController, this field accepts both Something and SomethingController in order to access it.
  • method — Public method to access. Defaults to index. Case-insensitive due to PHP method name case-insensitivity.
  • format — Can be set to json or html. Default is html, but methods with no templates associated just return data as JSON.

For example, /wikia.php?controller=UserApi&method=getUsersByName&query=KockaAdmiralac&format=json calls the getUsersByName method of the UserApi class and requests that the data is returned as JSON.

/api/v1

Can access only a subset of externally accessible controllers. Accessible controllers are those whose names end with ApiController with public method names starting with get. Always returns data as JSON. For example, /api/v1/Users/Details?ids=KockaAdmiralac accesses the getDetails method of the UserApiController class.

Controllers accessible through /api/v1 often have their parameters and responses documented on the same page, with their documentation auto-generated by Swagger. Some controllers, such as the WikisApiController, are only accessible from Community Central.

Available controllers

There are many Nirvana controllers available, but only a few of them are properly documented. The easiest way to find them is to use the file search option in Fandom's MediaWiki code repository and search for Controller.class.php. If you are unsure about how a controller can be used, feel free to leave a message on Fandom Developers Wiki's API Discussion board, and other users who worked with Nirvana controllers in past may be able to help you.

Definitions

These classes are used within the Nirvana framework.

WikiaApp
Wrapper for many common operations, such as hooks registration and getting access to global variables.
WikiaController
Wraps queries and data related logic into functions for the front end.
Can be accessed through /wikia.php or /api/v1 endpoints.
WikiaException
The exception class typically thrown by Nirvana controllers.
WikiaModel
Abstract class for other helper classes with methods for database access.
WikiaObject
Abstract class extended by non-controllers that still need framework variables.
WikiaRequest
An incomplete replacement for MediaWiki's WebRequest class.
WikiaResponse
Used for passing data between controllers and templates.
Any variables set in the response are in the JSON response of the controller.
WikiaService
Class for controllers that cannot be accessed externally.
WikiaSpecialPageController
Class for controllers used for controlling special page features.
WikiaView
Class representing a template.

See also