Class ApiRootAction

java.lang.Object
io.jenkins.plugins.interactiveinput.rest.ApiRootAction
All Implemented Interfaces:
ExtensionPoint, Action, ModelObject, RootAction, UnprotectedRootAction

@Extension public class ApiRootAction extends Object implements UnprotectedRootAction
Versioned JSON REST API rooted at /interactive-input/api/v1/ (§6.3, §8.6).

This is an UnprotectedRootAction so the anonymous /health liveness probe is reachable; every other endpoint enforces permissions explicitly. Mutating endpoints are @RequirePOST and therefore also require the standard Jenkins CSRF crumb (enforced by CrumbFilter at the framework level). Responses are always JSON via net.sf.json.

Routing (Stapler getter/do-method traversal):

   GET  /interactive-input/api/v1/questions              -> Questions#doIndex        (Overall/Read; ?all=true => Administer)
   GET  /interactive-input/api/v1/questions/{id}          -> QuestionEndpoint#doIndex  (Item.READ, else 404)
   POST /interactive-input/api/v1/questions/{id}/answer   -> QuestionEndpoint#doAnswer (Item.BUILD, else 403; 409 if settled)
   POST /interactive-input/api/v1/questions/{id}/abort    -> QuestionEndpoint#doAbort  (Item.CANCEL, else 403; 409 if settled)
   POST /interactive-input/api/v1/preview                 -> V1#doPreview              (Overall/Read; safe markdown preview)
   GET  /interactive-input/api/v1/health                  -> V1#doHealth               (anonymous)
   GET  /interactive-input/api/v1/views                   -> Views#doIndex             (Overall/Read; ?all=true => Administer)
   GET  /interactive-input/api/v1/views/{id}              -> ViewEndpoint#doIndex      (Item.READ, else 404)
   GET  /interactive-input/api/v1/views/{id}/raw          -> ViewEndpoint#doRaw        (Item.READ, else 404)
   GET  /interactive-input/api/v1/views/{id}/rendered     -> ViewEndpoint#doRendered   (Item.READ + HTML + flag, else 404)
   GET  /interactive-input/api/v1/views/{id}/download     -> ViewEndpoint#doDownload   (Item.READ, else 404)
   GET  /interactive-input/api/v1/views/{id}/downloadGroup -> ViewEndpoint#doDownloadGroup (Item.READ, else 404)
   POST /interactive-input/api/v1/views/{id}/comments     -> ViewEndpoint#doComments   (Item.BUILD/submitter, else 403)
   POST /interactive-input/api/v1/views/{id}/edit         -> ViewEndpoint#doEdit       (Item.BUILD/submitter, else 403)
   POST /interactive-input/api/v1/views/{id}/decision     -> ViewEndpoint#doDecision   (Item.BUILD/submitter, else 403)
   POST /interactive-input/api/v1/views/{id}/resolveComment -> ViewEndpoint#doResolveComment (Item.BUILD/submitter)