Specific handler for the nitweb API.

Introduced properties

private var _config: NitwebConfig

nitc :: APIHandler :: _config

App config.
fun config: NitwebConfig

nitc :: APIHandler :: config

App config.
protected fun config=(config: NitwebConfig)

nitc :: APIHandler :: config=

App config.
fun find_mentity(full_name: nullable String): nullable MEntity

nitc :: APIHandler :: find_mentity

Find the MEntity withfull_name`.
fun mentity_from_uri(req: HttpRequest, res: HttpResponse): nullable MEntity

nitc :: APIHandler :: mentity_from_uri

Try to load the mentity from uri with /:id.
fun paginate(results: JsonArray, count: Int, page: nullable Int, limit: nullable Int): JsonObject

nitc :: APIHandler :: paginate

Paginate a json array

Redefined properties

redef type SELF: APIHandler

nitc $ APIHandler :: SELF

Type of this instance, automatically specialized in every class

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type BODY: Serializable

popcorn :: Handler :: BODY

Kind of objects returned by deserialize_body
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
private var _body_type: String

popcorn :: Handler :: _body_type

private var _config: NitwebConfig

nitc :: APIHandler :: _config

App config.
private var _validator: nullable DocumentValidator

popcorn :: Handler :: _validator

Validator used to check body input
fun all(req: HttpRequest, res: HttpResponse)

popcorn :: Handler :: all

Handler to all kind of HTTP request methods.
private fun body_type: String

popcorn :: Handler :: body_type

private fun body_type=(body_type: String)

popcorn :: Handler :: body_type=

protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
fun config: NitwebConfig

nitc :: APIHandler :: config

App config.
protected fun config=(config: NitwebConfig)

nitc :: APIHandler :: config=

App config.
fun delete(req: HttpRequest, res: HttpResponse)

popcorn :: Handler :: delete

DELETE handler.
fun deserialize_body(req: HttpRequest, res: HttpResponse): nullable BODY

popcorn :: Handler :: deserialize_body

Deserialize the request body
fun find_mentity(full_name: nullable String): nullable MEntity

nitc :: APIHandler :: find_mentity

Find the MEntity withfull_name`.
fun get(req: HttpRequest, res: HttpResponse)

popcorn :: Handler :: get

GET handler.
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
private fun handle(route: AppRoute, uri: String, req: HttpRequest, res: HttpResponse)

popcorn :: Handler :: handle

Call all(req, res) if route matches uri.
fun hash: Int

core :: Object :: hash

The hash code of the object.
init init

core :: Object :: init

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
fun mentity_from_uri(req: HttpRequest, res: HttpResponse): nullable MEntity

nitc :: APIHandler :: mentity_from_uri

Try to load the mentity from uri with /:id.
private intern fun native_class_name: CString

core :: Object :: native_class_name

The class name of the object in CString format.
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun paginate(results: JsonArray, count: Int, page: nullable Int, limit: nullable Int): JsonObject

nitc :: APIHandler :: paginate

Paginate a json array
fun post(req: HttpRequest, res: HttpResponse)

popcorn :: Handler :: post

POST handler.
fun put(req: HttpRequest, res: HttpResponse)

popcorn :: Handler :: put

PUT handler.
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_s: String

core :: Object :: to_s

User readable representation of self.
fun validate_body(req: HttpRequest, res: HttpResponse): nullable String

popcorn :: Handler :: validate_body

Validate body input with validator
fun validator: nullable DocumentValidator

popcorn :: Handler :: validator

Validator used to check body input
protected fun validator=(validator: nullable DocumentValidator)

popcorn :: Handler :: validator=

Validator used to check body input
package_diagram nitc::APIHandler APIHandler popcorn::Handler Handler nitc::APIHandler->popcorn::Handler core::Object Object popcorn::Handler->core::Object ...core::Object ... ...core::Object->core::Object nitc::APIErrorHandler APIErrorHandler nitc::APIErrorHandler->nitc::APIHandler nitc::APICommand APICommand nitc::APICommand->nitc::APIHandler nitc::APIDocdown APIDocdown nitc::APIDocdown->nitc::APIHandler nitc::APIStructuralMetrics APIStructuralMetrics nitc::APIStructuralMetrics->nitc::APIHandler nitc::APIFeedBack APIFeedBack nitc::APIFeedBack->nitc::APIHandler nitc::APILight APILight nitc::APILight->nitc::APIHandler nitc::APICommand... ... nitc::APICommand...->nitc::APICommand nitc::APIStarsMost APIStarsMost nitc::APIStarsMost->nitc::APIFeedBack nitc::APIStarsBest APIStarsBest nitc::APIStarsBest->nitc::APIFeedBack nitc::APIStarsWorst APIStarsWorst nitc::APIStarsWorst->nitc::APIFeedBack nitc::APIStarsUsers APIStarsUsers nitc::APIStarsUsers->nitc::APIFeedBack nitc::APIUserStars APIUserStars nitc::APIUserStars->nitc::APIFeedBack nitc::APIStars APIStars nitc::APIStars->nitc::APIFeedBack nitc::APIStarsDimension APIStarsDimension nitc::APIStarsDimension->nitc::APIFeedBack nitc::APIStarsMost... ... nitc::APIStarsMost...->nitc::APIStarsMost nitc::APIStarsBest... ... nitc::APIStarsBest...->nitc::APIStarsBest nitc::APIStarsWorst... ... nitc::APIStarsWorst...->nitc::APIStarsWorst nitc::APIStarsUsers... ... nitc::APIStarsUsers...->nitc::APIStarsUsers nitc::APIUserStars... ... nitc::APIUserStars...->nitc::APIUserStars nitc::APIStars... ... nitc::APIStars...->nitc::APIStars nitc::APIStarsDimension... ... nitc::APIStarsDimension...->nitc::APIStarsDimension

Ancestors

interface Object

core :: Object

The root of the class hierarchy.

Parents

abstract class Handler

popcorn :: Handler

Class handler for a route.

Children

abstract class APICommand

nitc :: APICommand

An API Handler that use a DocCommand to respond
class APIDocdown

nitc :: APIDocdown

Docdown handler accept docdown as POST data and render it as HTML
class APIErrorHandler

nitc :: APIErrorHandler

Error handler user to catch non resolved request by the API
abstract class APIFeedBack

nitc :: APIFeedBack

Base handler for feedback features.
class APILight

nitc :: APILight

Highlight handler accept source code as POST data and render it as HTML with nitpick messages

Descendants

class APICatalogContributing

nitc :: APICatalogContributing

Get the list of mpackages contributed by a person
class APICatalogMaintaining

nitc :: APICatalogMaintaining

Get the list of mpackages maintained by a person
class APICatalogPackages

nitc :: APICatalogPackages

Get all the packages from the catalog using pagination
class APICatalogPerson

nitc :: APICatalogPerson

Get a person existing in the catalog
class APICatalogStats

nitc :: APICatalogStats

Get the catalog statistics
class APICatalogTag

nitc :: APICatalogTag

Get the packages related to a tag
class APICatalogTags

nitc :: APICatalogTags

Get all the tags from the catalog
class APIEntity

nitc :: APIEntity

Return the JSON representation of a MEntity.
class APIEntityAll

nitc :: APIEntityAll

List all definitions accessible from a MEntity.
class APIEntityAncestors

nitc :: APIEntityAncestors

List MEntity ancestors
class APIEntityChildren

nitc :: APIEntityChildren

List MEntity children
class APIEntityCode

nitc :: APIEntityCode

Return the source code of MEntity.
class APIEntityDefs

nitc :: APIEntityDefs

List definitions of a MEntity.
class APIEntityDescendants

nitc :: APIEntityDescendants

List MEntity descendants
class APIEntityDoc

nitc :: APIEntityDoc

Return the full MDoc of a MEntity.
class APIEntityIntros

nitc :: APIEntityIntros

List intro definitions of a MEntity.
class APIEntityLinearization

nitc :: APIEntityLinearization

Linearize super definitions of a MClassDef or a MPropDef if any.
class APIEntityMetadata

nitc :: APIEntityMetadata

Get the package metadata
class APIEntityParents

nitc :: APIEntityParents

List MEntity parents
class APIEntityRedefs

nitc :: APIEntityRedefs

List redef definitions of a MEntity.
class APIEntityUML

nitc :: APIEntityUML

Return the UML diagram for MEntity.
class APIInheritanceGraph

nitc :: APIInheritanceGraph

Return the inheritance graph for MEntity.
class APIIniClone

nitc :: APIIniClone

Get the package Git clone command from the ini file
class APIIniContribFile

nitc :: APIIniContribFile

Get the package contrib file
class APIIniContribFileContent

nitc :: APIIniContribFileContent

Get the package contrib file content
class APIIniContributors

nitc :: APIIniContributors

Get the package contributors from the ini file
class APIIniDesc

nitc :: APIIniDesc

Get the package description from the ini file
class APIIniGit

nitc :: APIIniGit

Get the package Git URL from the ini file
class APIIniIssues

nitc :: APIIniIssues

Get the package issues URL from the ini file
class APIIniLicense

nitc :: APIIniLicense

Get the package license from the ini file
class APIIniLicenseFile

nitc :: APIIniLicenseFile

Get the package license file
class APIIniLicenseFileContent

nitc :: APIIniLicenseFileContent

Get the package license file content
class APIIniMaintainer

nitc :: APIIniMaintainer

Get the package maintainer from the ini file
class APIList

nitc :: APIList

List all mentities.
class APIRandom

nitc :: APIRandom

Return a random list of MEntities.
class APISearch

nitc :: APISearch

Search mentities from a cmd string.
class APIStars

nitc :: APIStars

Stars attributed to mentities
class APIStarsBest

nitc :: APIStarsBest

Best rated entities
class APIStarsDimension

nitc :: APIStarsDimension

Stars attributed to mentities by dimension
class APIStarsMost

nitc :: APIStarsMost

Most rated entities
class APIStarsUsers

nitc :: APIStarsUsers

Best rated entities
class APIStarsWorst

nitc :: APIStarsWorst

Best rated entities
class APIUserStars

nitc :: APIUserStars

Stars attributed to mentities by user

Class definitions

nitc $ APIHandler
# Specific handler for the nitweb API.
abstract class APIHandler
	super Handler

	# App config.
	var config: NitwebConfig

	# Find the MEntity ` with `full_name`.
	fun find_mentity(full_name: nullable String): nullable MEntity do
		if full_name == null then return null
		var mentity = config.model.mentity_by_full_name(full_name.from_percent_encoding, config.filter)
		if mentity == null then return null

		var filter = config.filter
		if filter == null or filter.accept_mentity(mentity) then return mentity
		return null
	end

	# Try to load the mentity from uri with `/:id`.
	#
	# Send 400 if `:id` is null.
	# Send 404 if no entity is found.
	# Return null in both cases.
	fun mentity_from_uri(req: HttpRequest, res: HttpResponse): nullable MEntity do
		var id = req.param("id")
		if id == null then
			res.api_error(400, "Expected mentity full name")
			return null
		end
		var mentity = find_mentity(id)
		if mentity == null then
			res.api_error(404, "MEntity `{id}` not found")
		end
		return mentity
	end

	# Paginate a json array
	#
	# Returns only a subset of `results` depending on the current `page` and the
	# number of elements to return set by `limit`.
	#
	# Transforms the json array into an object:
	# ~~~json
	# {
	#	"page": 2,
	#	"limit": 10,
	#	"results: [ ... ],
	#	"max": 5,
	#	"total": 49
	# }
	# ~~~
	fun paginate(results: JsonArray, count: Int, page, limit: nullable Int): JsonObject do
		if page == null or page <= 0 then page = 1
		if limit == null or limit <= 0 then limit = 20

		var max = count / limit
		if max == 0 then
			page = 1
			max = 1
		else if page > max then
			page = max
		end

		var lstart = (page - 1) * limit
		var lend = limit
		if lstart + lend > count then lend = count - lstart

		var res = new JsonObject
		res["page"] = page
		res["limit"] = limit
		res["results"] = new JsonArray.from(results.subarray(lstart, lend))
		res["max"] = max
		res["total"] = count
		return res
	end
end
src/doc/api/api_base.nit:50,1--125,3