You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by mc...@apache.org on 2015/04/24 20:45:54 UTC

incubator-nifi git commit: NIFI-292: - Annotating endpoints using swagger. - Started building the template for the REST documentation.

Repository: incubator-nifi
Updated Branches:
  refs/heads/NIFI-292 [created] 524606cae


NIFI-292:
- Annotating endpoints using swagger.
- Started building the template for the REST documentation.

Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/524606ca
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/524606ca
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/524606ca

Branch: refs/heads/NIFI-292
Commit: 524606cae23f9aac091f1b0ea192f5816f9497fc
Parents: dca93a5
Author: Matt Gilman <ma...@gmail.com>
Authored: Fri Apr 24 14:45:18 2015 -0400
Committer: Matt Gilman <ma...@gmail.com>
Committed: Fri Apr 24 14:45:18 2015 -0400

----------------------------------------------------------------------
 .../nifi-web/nifi-web-api/pom.xml               |  57 ++-
 .../nifi/web/api/BulletinBoardResource.java     |   3 +
 .../apache/nifi/web/api/ClusterResource.java    |  10 +
 .../apache/nifi/web/api/ConnectionResource.java |  20 +
 .../apache/nifi/web/api/ControllerResource.java | 368 ++++++++++++++++++-
 .../nifi/web/api/ControllerServiceResource.java |   2 +
 .../org/apache/nifi/web/api/FunnelResource.java |   2 +
 .../apache/nifi/web/api/HistoryResource.java    |   2 +
 .../apache/nifi/web/api/InputPortResource.java  |   2 +
 .../org/apache/nifi/web/api/LabelResource.java  |   2 +
 .../org/apache/nifi/web/api/NodeResource.java   |   2 +
 .../apache/nifi/web/api/OutputPortResource.java |   2 +
 .../nifi/web/api/ProcessGroupResource.java      |  49 +++
 .../apache/nifi/web/api/ProcessorResource.java  |  20 +
 .../apache/nifi/web/api/ProvenanceResource.java |   2 +
 .../web/api/RemoteProcessGroupResource.java     |   2 +
 .../nifi/web/api/ReportingTaskResource.java     |   2 +
 .../apache/nifi/web/api/SnippetResource.java    |   2 +
 .../nifi/web/api/SystemDiagnosticsResource.java |   5 +
 .../apache/nifi/web/api/TemplateResource.java   |   2 +
 .../apache/nifi/web/api/UserGroupResource.java  |   2 +
 .../org/apache/nifi/web/api/UserResource.java   |   2 +
 .../src/main/resources/templates/endpoint.hbs   |  60 +++
 .../src/main/resources/templates/index.html.hbs | 170 +++++++++
 .../src/main/resources/templates/operation.hbs  |  93 +++++
 25 files changed, 863 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/pom.xml
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/pom.xml b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/pom.xml
index 5a87ff8..3734985 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/pom.xml
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/pom.xml
@@ -89,6 +89,44 @@
                     <reuseForks>false</reuseForks>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>com.github.kongchen</groupId>
+                <artifactId>swagger-maven-plugin</artifactId>
+                <version>3.0-M1</version>
+                <configuration>
+                    <apiSources>
+                        <apiSource>
+                            <locations>org.apache.nifi.web.api</locations>
+                            <schemes>http,https</schemes>
+                            <basePath>/nifi-api</basePath>
+                            <info>
+                                <title>NiFi Rest Api</title>
+                                <version>${project.version}</version>
+                                <!--<description>This is a sample for swagger-maven-plugin</description>-->
+                                <contact>
+                                    <email>dev@nifi.incubator.apache.org</email>
+                                    <url>https://nifi.incubator.apache.org/</url>
+                                </contact>
+                                <license>
+                                    <url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
+                                    <name>Apache 2.0</name>
+                                </license>
+                            </info>
+                            <templatePath>classpath:/templates/index.html.hbs</templatePath>
+                            <outputPath>${project.build.directory}/${project.artifactId}-${project.version}/docs/rest-api/index.html</outputPath>
+                            <swaggerDirectory>${project.build.directory}/swagger-ui</swaggerDirectory>
+                        </apiSource>
+                    </apiSources>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
     </build>
     <dependencies>
@@ -119,15 +157,8 @@
         </dependency>
         <dependency>
             <groupId>org.apache.nifi</groupId>
-            <artifactId>nifi-client-dto</artifactId>
-            <classifier>sources</classifier>
-            <scope>provided</scope>
-            <optional>true</optional>
-            <version>0.1.0-incubating-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.nifi</groupId>
             <artifactId>nifi-data-provenance-utils</artifactId>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.nifi</groupId>
@@ -198,6 +229,11 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
+            <groupId>com.wordnik</groupId>
+            <artifactId>swagger-core</artifactId>
+            <version>1.5.3-M1</version>
+        </dependency>
+        <dependency>
             <groupId>org.quartz-scheduler</groupId>
             <artifactId>quartz</artifactId>
             <scope>provided</scope>
@@ -208,6 +244,11 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-beans</artifactId>
             <scope>provided</scope>

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/BulletinBoardResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/BulletinBoardResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/BulletinBoardResource.java
index 32dafb9..9af8c5d 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/BulletinBoardResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/BulletinBoardResource.java
@@ -16,8 +16,10 @@
  */
 package org.apache.nifi.web.api;
 
+import com.wordnik.swagger.annotations.Api;
 import javax.ws.rs.DefaultValue;
 import javax.ws.rs.GET;
+import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
@@ -40,6 +42,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 /**
  * RESTful endpoint for managing a Template.
  */
+@Api(hidden = true)
 public class BulletinBoardResource extends ApplicationResource {
 
     private static final Logger logger = LoggerFactory.getLogger(BulletinBoardResource.class);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ClusterResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ClusterResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ClusterResource.java
index a99d7df..872ef22 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ClusterResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ClusterResource.java
@@ -69,6 +69,8 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
 
 import com.sun.jersey.api.core.ResourceContext;
+import com.wordnik.swagger.annotations.Api;
+import com.wordnik.swagger.annotations.ApiOperation;
 import org.apache.nifi.web.api.dto.status.ClusterProcessGroupStatusDTO;
 import org.apache.nifi.web.api.entity.ClusterProcessGroupStatusEntity;
 import org.codehaus.enunciate.jaxrs.TypeHint;
@@ -77,6 +79,10 @@ import org.codehaus.enunciate.jaxrs.TypeHint;
  * RESTful endpoint for managing a cluster.
  */
 @Path("/cluster")
+@Api(
+        value = "/cluster",
+        description = "Provides access to the cluster of Nodes that comprise this NiFi"
+)
 public class ClusterResource extends ApplicationResource {
 
     @Context
@@ -90,6 +96,10 @@ public class ClusterResource extends ApplicationResource {
      * @return
      */
     @Path("/nodes")
+    @ApiOperation(
+            value = "Gets the node resource",
+            response = NodeResource.class
+    )
     public NodeResource getNodeResource() {
         return resourceContext.getResource(NodeResource.class);
     }

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ConnectionResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ConnectionResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ConnectionResource.java
index 5d233f7..eb61310 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ConnectionResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ConnectionResource.java
@@ -16,6 +16,11 @@
  */
 package org.apache.nifi.web.api;
 
+import com.wordnik.swagger.annotations.Api;
+import com.wordnik.swagger.annotations.ApiOperation;
+import com.wordnik.swagger.annotations.ApiResponse;
+import com.wordnik.swagger.annotations.ApiResponses;
+import com.wordnik.swagger.annotations.Authorization;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.ArrayList;
@@ -73,6 +78,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 /**
  * RESTful endpoint for managing a Connection.
  */
+@Api(hidden = true)
 public class ConnectionResource extends ApplicationResource {
 
     private static final Logger logger = LoggerFactory.getLogger(ConnectionResource.class);
@@ -156,6 +162,20 @@ public class ConnectionResource extends ApplicationResource {
     @Path("/{id}")
     @PreAuthorize("hasAnyRole('ROLE_MONITOR', 'ROLE_DFM', 'ROLE_ADMIN')")
     @TypeHint(ConnectionEntity.class)
+    @ApiOperation(
+            value = "Gets the specified connection",
+            response = ConnectionEntity.class,
+            authorizations = {
+                @Authorization(value = "ROLE_MONITOR", type = "ROLE_MONITOR"),
+                @Authorization(value = "ROLE_DFM", type = "ROLE_DFM"),
+                @Authorization(value = "ROLE_ADMIN", type = "ROLE_ADMIN")
+            }
+    )
+    @ApiResponses(
+            value = {
+                @ApiResponse(code = 403, message = "Client is not authorized to make this request")
+            }
+    )
     public Response getConnection(@QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId,
             @PathParam("id") String id) {
 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerResource.java
index 9228be4..6eb66c1 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerResource.java
@@ -17,6 +17,12 @@
 package org.apache.nifi.web.api;
 
 import com.sun.jersey.api.core.ResourceContext;
+import com.wordnik.swagger.annotations.Api;
+import com.wordnik.swagger.annotations.ApiOperation;
+import com.wordnik.swagger.annotations.ApiParam;
+import com.wordnik.swagger.annotations.ApiResponse;
+import com.wordnik.swagger.annotations.ApiResponses;
+import com.wordnik.swagger.annotations.Authorization;
 
 import java.net.URI;
 import java.util.HashMap;
@@ -81,6 +87,10 @@ import org.springframework.security.access.prepost.PreAuthorize;
  * RESTful endpoint for managing a Flow Controller.
  */
 @Path("/controller")
+@Api(
+        value = "/controller",
+        description = "Provides realtime command and control of this NiFi instance"
+)
 public class ControllerResource extends ApplicationResource {
 
     private NiFiServiceFacade serviceFacade;
@@ -96,6 +106,10 @@ public class ControllerResource extends ApplicationResource {
      * @return
      */
     @Path("/provenance")
+    @ApiOperation(
+            value = "Gets the provenance resource",
+            response = ProvenanceResource.class
+    )
     public ProvenanceResource getProvenanceResource() {
         return resourceContext.getResource(ProvenanceResource.class);
     }
@@ -106,6 +120,10 @@ public class ControllerResource extends ApplicationResource {
      * @return
      */
     @Path("/users")
+    @ApiOperation(
+            value = "Gets the user resource",
+            response = UserResource.class
+    )
     public UserResource getUserResource() {
         return resourceContext.getResource(UserResource.class);
     }
@@ -116,6 +134,10 @@ public class ControllerResource extends ApplicationResource {
      * @return
      */
     @Path("/user-groups")
+    @ApiOperation(
+            value = "Gets the user group resource",
+            response = UserGroupResource.class
+    )
     public UserGroupResource getUserGroupResource() {
         return resourceContext.getResource(UserGroupResource.class);
     }
@@ -126,6 +148,10 @@ public class ControllerResource extends ApplicationResource {
      * @return
      */
     @Path("/history")
+    @ApiOperation(
+            value = "Gets the history resource",
+            response = HistoryResource.class
+    )
     public HistoryResource getHistoryResource() {
         return resourceContext.getResource(HistoryResource.class);
     }
@@ -136,6 +162,10 @@ public class ControllerResource extends ApplicationResource {
      * @return
      */
     @Path("/bulletin-board")
+    @ApiOperation(
+            value = "Gets the bulletin board resource",
+            response = BulletinBoardResource.class
+    )
     public BulletinBoardResource getBulletinBoardResource() {
         return resourceContext.getResource(BulletinBoardResource.class);
     }
@@ -146,6 +176,10 @@ public class ControllerResource extends ApplicationResource {
      * @return
      */
     @Path("/templates")
+    @ApiOperation(
+            value = "Gets the template resource",
+            response = TemplateResource.class
+    )
     public TemplateResource getTemplateResource() {
         return resourceContext.getResource(TemplateResource.class);
     }
@@ -156,6 +190,10 @@ public class ControllerResource extends ApplicationResource {
      * @return
      */
     @Path("/snippets")
+    @ApiOperation(
+            value = "Gets the snippet resource",
+            response = SnippetResource.class
+    )
     public SnippetResource getSnippetResource() {
         return resourceContext.getResource(SnippetResource.class);
     }
@@ -166,6 +204,10 @@ public class ControllerResource extends ApplicationResource {
      * @return
      */
     @Path("/controller-services")
+    @ApiOperation(
+            value = "Gets the controller service resource",
+            response = ControllerServiceResource.class
+    )
     public ControllerServiceResource getControllerServiceResource() {
         return resourceContext.getResource(ControllerServiceResource.class);
     }
@@ -176,6 +218,10 @@ public class ControllerResource extends ApplicationResource {
      * @return
      */
     @Path("/reporting-tasks")
+    @ApiOperation(
+            value = "Gets the reporting task resource",
+            response = ReportingTaskResource.class
+    )
     public ReportingTaskResource getReportingTaskResource() {
         return resourceContext.getResource(ReportingTaskResource.class);
     }
@@ -187,6 +233,10 @@ public class ControllerResource extends ApplicationResource {
      * @return
      */
     @Path("/process-groups/{process-group-id}")
+    @ApiOperation(
+            value = "Gets the process group resource",
+            response = ProcessGroupResource.class
+    )
     public ProcessGroupResource getGroupResource(@PathParam("process-group-id") String groupId) {
         ProcessGroupResource groupResource = resourceContext.getResource(ProcessGroupResource.class);
         groupResource.setGroupId(groupId);
@@ -221,7 +271,22 @@ public class ControllerResource extends ApplicationResource {
     @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     @PreAuthorize("hasRole('ROLE_NIFI')")
     @TypeHint(ControllerEntity.class)
-    public Response getController(@QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
+    @ApiOperation(
+            value = "Returns the details about this NiFi necessary to communicate via site to site",
+            response = ControllerEntity.class,
+            authorizations = @Authorization(value = "ROLE_NIFI", type = "ROLE_NIFI")
+    )
+    @ApiResponses(
+            value = {
+                @ApiResponse(code = 403, message = "Client is not authorized to make this request")
+            }
+    )
+    public Response getController(
+            @ApiParam(
+                    value = "If the client id is not specified, new one will be generated. This value (whether specified or generated) is included in the response",
+                    required = false
+            )
+            @QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
 
         if (properties.isClusterManager()) {
             return clusterManager.applyRequest(HttpMethod.GET, getAbsolutePath(), getRequestParameters(true), getHeaders()).getResponse();
@@ -254,6 +319,20 @@ public class ControllerResource extends ApplicationResource {
     @Path("/search-results")
     @PreAuthorize("hasAnyRole('ROLE_MONITOR', 'ROLE_DFM', 'ROLE_ADMIN')")
     @TypeHint(SearchResultsEntity.class)
+    @ApiOperation(
+            value = "Performs a search against this NiFi using the specified search term",
+            response = SearchResultsEntity.class,
+            authorizations = {
+                @Authorization(value = "ROLE_MONITOR", type = "ROLE_MONITOR"),
+                @Authorization(value = "ROLE_DFM", type = "ROLE_DFM"),
+                @Authorization(value = "ROLE_ADMIN", type = "ROLE_ADMIN")
+            }
+    )
+    @ApiResponses(
+            value = {
+                @ApiResponse(code = 403, message = "Client is not authorized to make this request")
+            }
+    )
     public Response searchController(@QueryParam("q") @DefaultValue(StringUtils.EMPTY) String value) {
         // replicate if cluster manager
         if (properties.isClusterManager()) {
@@ -296,9 +375,33 @@ public class ControllerResource extends ApplicationResource {
     @Path("/archive")
     @PreAuthorize("hasRole('ROLE_DFM')")
     @TypeHint(ProcessGroupEntity.class)
+    @ApiOperation(
+            value = "Creates a new archive of this NiFi flow configuration",
+            notes = "This POST operation returns a URI that is not representative of the thing "
+                    + "that was actually created. The archive that is created cannot be referenced "
+                    + "at a later time, therefore there is no corresponding URI. Instead the "
+                    + "request URI is returned.",
+            response = ProcessGroupEntity.class,
+            authorizations = {
+                @Authorization(value = "ROLE_DFM", type = "ROLE_DFM")
+            }
+    )
+    @ApiResponses(
+            value = {
+                @ApiResponse(code = 403, message = "Client is not authorized to make this request")
+            }
+    )
     public Response createArchive(
             @Context HttpServletRequest httpServletRequest,
+            @ApiParam(
+                    value = "The revision is used to verify the client is working with the latest version of the flow",
+                    required = true
+            )
             @FormParam(VERSION) LongParameter version,
+            @ApiParam(
+                    value = "If the client id is not specified, new one will be generated. This value (whether specified or generated) is included in the response",
+                    required = false
+            )
             @FormParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
 
         // replicate if cluster manager
@@ -346,6 +449,20 @@ public class ControllerResource extends ApplicationResource {
     @Path("/revision")
     @PreAuthorize("hasAnyRole('ROLE_MONITOR', 'ROLE_DFM', 'ROLE_ADMIN')")
     @TypeHint(Entity.class)
+    @ApiOperation(
+            value = "Gets the current revision of this NiFi",
+            response = Entity.class,
+            authorizations = {
+                @Authorization(value = "ROLE_MONITOR", type = "ROLE_MONITOR"),
+                @Authorization(value = "ROLE_DFM", type = "ROLE_DFM"),
+                @Authorization(value = "ROLE_ADMIN", type = "ROLE_ADMIN")
+            }
+    )
+    @ApiResponses(
+            value = {
+                @ApiResponse(code = 403, message = "Client is not authorized to make this request")
+            }
+    )
     public Response getRevision() {
         // create the current revision
         final RevisionDTO revision = serviceFacade.getRevision();
@@ -371,7 +488,26 @@ public class ControllerResource extends ApplicationResource {
     @Path("/status")
     @PreAuthorize("hasAnyRole('ROLE_MONITOR', 'ROLE_DFM', 'ROLE_ADMIN')")
     @TypeHint(ControllerStatusEntity.class)
-    public Response getControllerStatus(@QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
+    @ApiOperation(
+            value = "Gets the current status of this NiFi",
+            response = Entity.class,
+            authorizations = {
+                @Authorization(value = "ROLE_MONITOR", type = "ROLE_MONITOR"),
+                @Authorization(value = "ROLE_DFM", type = "ROLE_DFM"),
+                @Authorization(value = "ROLE_ADMIN", type = "ROLE_ADMIN")
+            }
+    )
+    @ApiResponses(
+            value = {
+                @ApiResponse(code = 403, message = "Client is not authorized to make this request")
+            }
+    )
+    public Response getControllerStatus(
+            @ApiParam(
+                    value = "If the client id is not specified, new one will be generated. This value (whether specified or generated) is included in the response",
+                    required = false
+            )
+            @QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
 
         final ControllerStatusDTO controllerStatus = serviceFacade.getControllerStatus();
 
@@ -401,7 +537,26 @@ public class ControllerResource extends ApplicationResource {
     @Path("/counters")
     @PreAuthorize("hasAnyRole('ROLE_MONITOR', 'ROLE_DFM', 'ROLE_ADMIN')")
     @TypeHint(CountersEntity.class)
-    public Response getCounters(@QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
+    @ApiOperation(
+            value = "Gets the current counters for this NiFi",
+            response = Entity.class,
+            authorizations = {
+                @Authorization(value = "ROLE_MONITOR", type = "ROLE_MONITOR"),
+                @Authorization(value = "ROLE_DFM", type = "ROLE_DFM"),
+                @Authorization(value = "ROLE_ADMIN", type = "ROLE_ADMIN")
+            }
+    )
+    @ApiResponses(
+            value = {
+                @ApiResponse(code = 403, message = "Client is not authorized to make this request")
+            }
+    )
+    public Response getCounters(
+            @ApiParam(
+                    value = "If the client id is not specified, new one will be generated. This value (whether specified or generated) is included in the response",
+                    required = false
+            )
+            @QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
 
         final CountersDTO countersReport = serviceFacade.getCounters();
 
@@ -431,10 +586,26 @@ public class ControllerResource extends ApplicationResource {
     @PUT
     @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     @Path("/counters/{id}")
-    @PreAuthorize("hasAnyRole('ROLE_MONITOR', 'ROLE_DFM', 'ROLE_ADMIN')")
+    @PreAuthorize("hasRole('ROLE_DFM')")
     @TypeHint(CounterEntity.class)
+    @ApiOperation(
+            value = "Updates the specified counter. This will reset the counter value to 0",
+            response = CounterEntity.class,
+            authorizations = {
+                @Authorization(value = "ROLE_DFM", type = "ROLE_DFM")
+            }
+    )
+    @ApiResponses(
+            value = {
+                @ApiResponse(code = 403, message = "Client is not authorized to make this request")
+            }
+    )
     public Response updateCounter(
             @Context HttpServletRequest httpServletRequest,
+            @ApiParam(
+                    value = "If the client id is not specified, new one will be generated. This value (whether specified or generated) is included in the response",
+                    required = false
+            )
             @FormParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId,
             @PathParam("id") String id) {
 
@@ -478,7 +649,28 @@ public class ControllerResource extends ApplicationResource {
     @Path("/config")
     @PreAuthorize("hasAnyRole('ROLE_MONITOR', 'ROLE_DFM', 'ROLE_ADMIN', 'ROLE_NIFI')")
     @TypeHint(ControllerConfigurationEntity.class)
-    public Response getControllerConfig(@QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
+    @ApiOperation(
+            value = "Retrieves the configuration for this NiFi",
+            response = ControllerConfigurationEntity.class,
+            authorizations = {
+                @Authorization(value = "ROLE_MONITOR", type = "ROLE_MONITOR"),
+                @Authorization(value = "ROLE_DFM", type = "ROLE_DFM"),
+                @Authorization(value = "ROLE_ADMIN", type = "ROLE_ADMIN"),
+                @Authorization(value = "ROLE_NIFI", type = "ROLE_NIFI")
+            }
+    )
+    @ApiResponses(
+            value = {
+                @ApiResponse(code = 403, message = "Client is not authorized to make this request")
+            }
+    )
+    public Response getControllerConfig(
+            @ApiParam(
+                    value = "If the client id is not specified, new one will be generated. This value (whether specified or generated) is included in the response",
+                    required = false
+            )
+            @QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
+
         // replicate if cluster manager
         if (properties.isClusterManager()) {
             return clusterManager.applyRequest(HttpMethod.GET, getAbsolutePath(), getRequestParameters(true), getHeaders()).getResponse();
@@ -575,9 +767,24 @@ public class ControllerResource extends ApplicationResource {
     @Path("/config")
     @PreAuthorize("hasRole('ROLE_DFM')")
     @TypeHint(ControllerConfigurationEntity.class)
+    @ApiOperation(
+            value = "Retrieves the configuration for this NiFi",
+            response = ControllerConfigurationEntity.class,
+            authorizations = {
+                @Authorization(value = "ROLE_DFM", type = "ROLE_DFM")
+            }
+    )
+    @ApiResponses(
+            value = {
+                @ApiResponse(code = 403, message = "Client is not authorized to make this request")
+            }
+    )
     public Response updateControllerConfig(
             @Context HttpServletRequest httpServletRequest,
-            ControllerConfigurationEntity configEntity) {
+            @ApiParam(
+                    value = "The controller configuration",
+                    required = true
+            ) ControllerConfigurationEntity configEntity) {
 
         if (configEntity == null || configEntity.getConfig() == null) {
             throw new IllegalArgumentException("Controller configuration must be specified");
@@ -637,7 +844,27 @@ public class ControllerResource extends ApplicationResource {
     @Path("/authorities")
     @PreAuthorize("hasAnyRole('ROLE_MONITOR', 'ROLE_DFM', 'ROLE_ADMIN')")
     @TypeHint(AuthorityEntity.class)
-    public Response getAuthorities(@QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
+    @ApiOperation(
+            value = "Retrieves the user details, including the authorities, about the user making the request",
+            response = AuthorityEntity.class,
+            authorizations = {
+                @Authorization(value = "ROLE_MONITOR", type = "ROLE_MONITOR"),
+                @Authorization(value = "ROLE_DFM", type = "ROLE_DFM"),
+                @Authorization(value = "ROLE_ADMIN", type = "ROLE_ADMIN")
+            }
+    )
+    @ApiResponses(
+            value = {
+                @ApiResponse(code = 403, message = "Client is not authorized to make this request")
+            }
+    )
+    public Response getAuthorities(
+            @ApiParam(
+                    value = "If the client id is not specified, new one will be generated. This value (whether specified or generated) is included in the response",
+                    required = false
+            )
+            @QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
+
         // note that the cluster manager will handle this request directly
         final NiFiUser user = NiFiUserUtils.getNiFiUser();
         if (user == null) {
@@ -671,7 +898,26 @@ public class ControllerResource extends ApplicationResource {
     @Path("/banners")
     @PreAuthorize("hasAnyRole('ROLE_MONITOR', 'ROLE_DFM', 'ROLE_ADMIN')")
     @TypeHint(BannerEntity.class)
-    public Response getBanners(@QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
+    @ApiOperation(
+            value = "Retrieves the banners for this NiFi",
+            response = BannerEntity.class,
+            authorizations = {
+                @Authorization(value = "ROLE_MONITOR", type = "ROLE_MONITOR"),
+                @Authorization(value = "ROLE_DFM", type = "ROLE_DFM"),
+                @Authorization(value = "ROLE_ADMIN", type = "ROLE_ADMIN")
+            }
+    )
+    @ApiResponses(
+            value = {
+                @ApiResponse(code = 403, message = "Client is not authorized to make this request")
+            }
+    )
+    public Response getBanners(
+            @ApiParam(
+                    value = "If the client id is not specified, new one will be generated. This value (whether specified or generated) is included in the response",
+                    required = false
+            )
+            @QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
 
         // replicate if cluster manager
         if (properties.isClusterManager()) {
@@ -711,7 +957,26 @@ public class ControllerResource extends ApplicationResource {
     @Path("/processor-types")
     @PreAuthorize("hasAnyRole('ROLE_MONITOR', 'ROLE_DFM', 'ROLE_ADMIN')")
     @TypeHint(ProcessorTypesEntity.class)
-    public Response getProcessorTypes(@QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
+    @ApiOperation(
+            value = "Retrieves the types of processors that this NiFi supports",
+            response = ProcessorTypesEntity.class,
+            authorizations = {
+                @Authorization(value = "ROLE_MONITOR", type = "ROLE_MONITOR"),
+                @Authorization(value = "ROLE_DFM", type = "ROLE_DFM"),
+                @Authorization(value = "ROLE_ADMIN", type = "ROLE_ADMIN")
+            }
+    )
+    @ApiResponses(
+            value = {
+                @ApiResponse(code = 403, message = "Client is not authorized to make this request")
+            }
+    )
+    public Response getProcessorTypes(
+            @ApiParam(
+                    value = "If the client id is not specified, new one will be generated. This value (whether specified or generated) is included in the response",
+                    required = false
+            )
+            @QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
 
         // replicate if cluster manager
         if (properties.isClusterManager()) {
@@ -745,8 +1010,30 @@ public class ControllerResource extends ApplicationResource {
     @Path("/controller-service-types")
     @PreAuthorize("hasAnyRole('ROLE_MONITOR', 'ROLE_DFM', 'ROLE_ADMIN')")
     @TypeHint(ControllerServiceTypesEntity.class)
+    @ApiOperation(
+            value = "Retrieves the types of controller services that this NiFi supports",
+            response = ControllerServiceTypesEntity.class,
+            authorizations = {
+                @Authorization(value = "ROLE_MONITOR", type = "ROLE_MONITOR"),
+                @Authorization(value = "ROLE_DFM", type = "ROLE_DFM"),
+                @Authorization(value = "ROLE_ADMIN", type = "ROLE_ADMIN")
+            }
+    )
+    @ApiResponses(
+            value = {
+                @ApiResponse(code = 403, message = "Client is not authorized to make this request")
+            }
+    )
     public Response getControllerServiceTypes(
+            @ApiParam(
+                    value = "If the client id is not specified, new one will be generated. This value (whether specified or generated) is included in the response",
+                    required = false
+            )
             @QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId,
+            @ApiParam(
+                    value = "If specified, will only return controller services of this type",
+                    required = false
+            )
             @QueryParam("serviceType") String serviceType) {
 
         // replicate if cluster manager
@@ -780,7 +1067,26 @@ public class ControllerResource extends ApplicationResource {
     @Path("/reporting-task-types")
     @PreAuthorize("hasAnyRole('ROLE_MONITOR', 'ROLE_DFM', 'ROLE_ADMIN')")
     @TypeHint(ReportingTaskTypesEntity.class)
-    public Response getReportingTaskTypes(@QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
+    @ApiOperation(
+            value = "Retrieves the types of reporting tasks that this NiFi supports",
+            response = ReportingTaskTypesEntity.class,
+            authorizations = {
+                @Authorization(value = "ROLE_MONITOR", type = "ROLE_MONITOR"),
+                @Authorization(value = "ROLE_DFM", type = "ROLE_DFM"),
+                @Authorization(value = "ROLE_ADMIN", type = "ROLE_ADMIN")
+            }
+    )
+    @ApiResponses(
+            value = {
+                @ApiResponse(code = 403, message = "Client is not authorized to make this request")
+            }
+    )
+    public Response getReportingTaskTypes(
+            @ApiParam(
+                    value = "If the client id is not specified, new one will be generated. This value (whether specified or generated) is included in the response",
+                    required = false
+            )
+            @QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
 
         // replicate if cluster manager
         if (properties.isClusterManager()) {
@@ -813,7 +1119,26 @@ public class ControllerResource extends ApplicationResource {
     @Path("/prioritizers")
     @PreAuthorize("hasAnyRole('ROLE_MONITOR', 'ROLE_DFM', 'ROLE_ADMIN')")
     @TypeHint(PrioritizerTypesEntity.class)
-    public Response getPrioritizers(@QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
+    @ApiOperation(
+            value = "Retrieves the types of prioritizers that this NiFi supports",
+            response = PrioritizerTypesEntity.class,
+            authorizations = {
+                @Authorization(value = "ROLE_MONITOR", type = "ROLE_MONITOR"),
+                @Authorization(value = "ROLE_DFM", type = "ROLE_DFM"),
+                @Authorization(value = "ROLE_ADMIN", type = "ROLE_ADMIN")
+            }
+    )
+    @ApiResponses(
+            value = {
+                @ApiResponse(code = 403, message = "Client is not authorized to make this request")
+            }
+    )
+    public Response getPrioritizers(
+            @ApiParam(
+                    value = "If the client id is not specified, new one will be generated. This value (whether specified or generated) is included in the response",
+                    required = false
+            )
+            @QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
 
         // replicate if cluster manager
         if (properties.isClusterManager()) {
@@ -846,7 +1171,26 @@ public class ControllerResource extends ApplicationResource {
     @Path("/about")
     @PreAuthorize("hasAnyRole('ROLE_MONITOR', 'ROLE_DFM', 'ROLE_ADMIN')")
     @TypeHint(AboutEntity.class)
-    public Response getAboutInfo(@QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
+    @ApiOperation(
+            value = "Retrieves details about this NiFi to put in the About dialog",
+            response = AboutEntity.class,
+            authorizations = {
+                @Authorization(value = "ROLE_MONITOR", type = "ROLE_MONITOR"),
+                @Authorization(value = "ROLE_DFM", type = "ROLE_DFM"),
+                @Authorization(value = "ROLE_ADMIN", type = "ROLE_ADMIN")
+            }
+    )
+    @ApiResponses(
+            value = {
+                @ApiResponse(code = 403, message = "Client is not authorized to make this request")
+            }
+    )
+    public Response getAboutInfo(
+            @ApiParam(
+                    value = "If the client id is not specified, new one will be generated. This value (whether specified or generated) is included in the response",
+                    required = false
+            )
+            @QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId) {
 
         // replicate if cluster manager
         if (properties.isClusterManager()) {

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerServiceResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerServiceResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerServiceResource.java
index bd3daf2..7e27056 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerServiceResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerServiceResource.java
@@ -16,6 +16,7 @@
  */
 package org.apache.nifi.web.api;
 
+import com.wordnik.swagger.annotations.Api;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.HashMap;
@@ -74,6 +75,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 /**
  * RESTful endpoint for managing a Controller Service.
  */
+@Api(hidden = true)
 public class ControllerServiceResource extends ApplicationResource {
 
     private static final Logger logger = LoggerFactory.getLogger(ControllerServiceResource.class);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FunnelResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FunnelResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FunnelResource.java
index 4e6095e..5bf9443 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FunnelResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FunnelResource.java
@@ -16,6 +16,7 @@
  */
 package org.apache.nifi.web.api;
 
+import com.wordnik.swagger.annotations.Api;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.HashMap;
@@ -61,6 +62,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 /**
  * RESTful endpoint for managing a Funnel.
  */
+@Api(hidden = true)
 public class FunnelResource extends ApplicationResource {
 
     private static final Logger logger = LoggerFactory.getLogger(FunnelResource.class);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/HistoryResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/HistoryResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/HistoryResource.java
index 49bede82..ec9a1d7 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/HistoryResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/HistoryResource.java
@@ -16,6 +16,7 @@
  */
 package org.apache.nifi.web.api;
 
+import com.wordnik.swagger.annotations.Api;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.DefaultValue;
 import javax.ws.rs.GET;
@@ -44,6 +45,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 /**
  * RESTful endpoint for querying the history of this Controller.
  */
+@Api(hidden = true)
 public class HistoryResource extends ApplicationResource {
 
     private NiFiServiceFacade serviceFacade;

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/InputPortResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/InputPortResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/InputPortResource.java
index 9b5eeba..d602624 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/InputPortResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/InputPortResource.java
@@ -16,6 +16,7 @@
  */
 package org.apache.nifi.web.api;
 
+import com.wordnik.swagger.annotations.Api;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.HashMap;
@@ -63,6 +64,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 /**
  * RESTful endpoint for managing an Input Port.
  */
+@Api(hidden = true)
 public class InputPortResource extends ApplicationResource {
 
     private static final Logger logger = LoggerFactory.getLogger(InputPortResource.class);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/LabelResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/LabelResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/LabelResource.java
index 4905ad3..61dafa8 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/LabelResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/LabelResource.java
@@ -16,6 +16,7 @@
  */
 package org.apache.nifi.web.api;
 
+import com.wordnik.swagger.annotations.Api;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.HashMap;
@@ -63,6 +64,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 /**
  * RESTful endpoint for managing a Label.
  */
+@Api(hidden = true)
 public class LabelResource extends ApplicationResource {
 
     private static final Logger logger = LoggerFactory.getLogger(LabelResource.class);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/NodeResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/NodeResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/NodeResource.java
index db3d040..da20fdb 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/NodeResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/NodeResource.java
@@ -16,6 +16,7 @@
  */
 package org.apache.nifi.web.api;
 
+import com.wordnik.swagger.annotations.Api;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.DefaultValue;
@@ -46,6 +47,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 /**
  * RESTful endpoint for managing a cluster connection.
  */
+@Api(hidden = true)
 public class NodeResource extends ApplicationResource {
 
     private NiFiServiceFacade serviceFacade;

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/OutputPortResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/OutputPortResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/OutputPortResource.java
index 168ec90..2eb9721 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/OutputPortResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/OutputPortResource.java
@@ -16,6 +16,7 @@
  */
 package org.apache.nifi.web.api;
 
+import com.wordnik.swagger.annotations.Api;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.HashMap;
@@ -63,6 +64,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 /**
  * RESTful endpoint for managing an Output Port.
  */
+@Api(hidden = true)
 public class OutputPortResource extends ApplicationResource {
 
     private static final Logger logger = LoggerFactory.getLogger(OutputPortResource.class);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProcessGroupResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProcessGroupResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProcessGroupResource.java
index 1bf3f77..79e457d 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProcessGroupResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProcessGroupResource.java
@@ -17,6 +17,11 @@
 package org.apache.nifi.web.api;
 
 import com.sun.jersey.api.core.ResourceContext;
+import com.wordnik.swagger.annotations.Api;
+import com.wordnik.swagger.annotations.ApiOperation;
+import com.wordnik.swagger.annotations.ApiResponse;
+import com.wordnik.swagger.annotations.ApiResponses;
+import com.wordnik.swagger.annotations.Authorization;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.HashMap;
@@ -68,6 +73,8 @@ import org.springframework.security.access.prepost.PreAuthorize;
 /**
  * RESTful endpoint for managing a Group.
  */
+//@Path("") // necessary due to bug in swagger
+@Api(hidden = true)
 public class ProcessGroupResource extends ApplicationResource {
 
     private static final String VERBOSE = "false";
@@ -87,6 +94,10 @@ public class ProcessGroupResource extends ApplicationResource {
      * @return
      */
     @Path("processors")
+    @ApiOperation(
+            value = "Gets the processor resource",
+            response = ProcessorResource.class
+    )
     public ProcessorResource getProcessorResource() {
         ProcessorResource processorResource = resourceContext.getResource(ProcessorResource.class);
         processorResource.setGroupId(groupId);
@@ -99,6 +110,10 @@ public class ProcessGroupResource extends ApplicationResource {
      * @return
      */
     @Path("connections")
+    @ApiOperation(
+            value = "Gets the connection resource",
+            response = ConnectionResource.class
+    )
     public ConnectionResource getConnectionResource() {
         ConnectionResource connectionResource = resourceContext.getResource(ConnectionResource.class);
         connectionResource.setGroupId(groupId);
@@ -111,6 +126,10 @@ public class ProcessGroupResource extends ApplicationResource {
      * @return
      */
     @Path("input-ports")
+    @ApiOperation(
+            value = "Gets the input port resource",
+            response = InputPortResource.class
+    )
     public InputPortResource getInputPortResource() {
         InputPortResource inputPortResource = resourceContext.getResource(InputPortResource.class);
         inputPortResource.setGroupId(groupId);
@@ -123,6 +142,10 @@ public class ProcessGroupResource extends ApplicationResource {
      * @return
      */
     @Path("output-ports")
+    @ApiOperation(
+            value = "Gets the output port resource",
+            response = OutputPortResource.class
+    )
     public OutputPortResource getOutputPortResource() {
         OutputPortResource outputPortResource = resourceContext.getResource(OutputPortResource.class);
         outputPortResource.setGroupId(groupId);
@@ -135,6 +158,10 @@ public class ProcessGroupResource extends ApplicationResource {
      * @return
      */
     @Path("labels")
+    @ApiOperation(
+            value = "Gets the label resource",
+            response = LabelResource.class
+    )
     public LabelResource getLabelResource() {
         LabelResource labelResource = resourceContext.getResource(LabelResource.class);
         labelResource.setGroupId(groupId);
@@ -147,6 +174,10 @@ public class ProcessGroupResource extends ApplicationResource {
      * @return
      */
     @Path("funnels")
+    @ApiOperation(
+            value = "Gets the funnel resource",
+            response = FunnelResource.class
+    )
     public FunnelResource getFunnelResource() {
         FunnelResource funnelResource = resourceContext.getResource(FunnelResource.class);
         funnelResource.setGroupId(groupId);
@@ -159,6 +190,10 @@ public class ProcessGroupResource extends ApplicationResource {
      * @return
      */
     @Path("remote-process-groups")
+    @ApiOperation(
+            value = "Gets the remote process group resource",
+            response = RemoteProcessGroupResource.class
+    )
     public RemoteProcessGroupResource getRemoteProcessGroupResource() {
         RemoteProcessGroupResource remoteProcessGroupResource = resourceContext.getResource(RemoteProcessGroupResource.class);
         remoteProcessGroupResource.setGroupId(groupId);
@@ -262,6 +297,20 @@ public class ProcessGroupResource extends ApplicationResource {
     @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     @PreAuthorize("hasAnyRole('ROLE_MONITOR', 'ROLE_DFM', 'ROLE_ADMIN')")
     @TypeHint(ProcessGroupEntity.class)
+    @ApiOperation(
+            value = "Gets the specified process group",
+            response = ProcessGroupEntity.class,
+            authorizations = {
+                @Authorization(value = "ROLE_MONITOR", type = "ROLE_MONITOR"),
+                @Authorization(value = "ROLE_DFM", type = "ROLE_DFM"),
+                @Authorization(value = "ROLE_ADMIN", type = "ROLE_ADMIN")
+            }
+    )
+    @ApiResponses(
+            value = {
+                @ApiResponse(code = 403, message = "Client is not authorized to make this request")
+            }
+    )
     public Response getProcessGroup(
             @QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId,
             @QueryParam("recursive") @DefaultValue(RECURSIVE) Boolean recursive,

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProcessorResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProcessorResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProcessorResource.java
index 00b6fe3..e66778b 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProcessorResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProcessorResource.java
@@ -16,6 +16,11 @@
  */
 package org.apache.nifi.web.api;
 
+import com.wordnik.swagger.annotations.Api;
+import com.wordnik.swagger.annotations.ApiOperation;
+import com.wordnik.swagger.annotations.ApiResponse;
+import com.wordnik.swagger.annotations.ApiResponses;
+import com.wordnik.swagger.annotations.Authorization;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.Arrays;
@@ -83,6 +88,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 /**
  * RESTful endpoint for managing a Processor.
  */
+@Api(hidden = true)
 public class ProcessorResource extends ApplicationResource {
 
     private static final Logger logger = LoggerFactory.getLogger(ProcessorResource.class);
@@ -335,6 +341,20 @@ public class ProcessorResource extends ApplicationResource {
     @Path("/{id}")
     @PreAuthorize("hasAnyRole('ROLE_MONITOR', 'ROLE_DFM', 'ROLE_ADMIN')")
     @TypeHint(ProcessorEntity.class)
+    @ApiOperation(
+            value = "Gets the specified processor",
+            response = ProcessorEntity.class,
+            authorizations = {
+                @Authorization(value = "ROLE_MONITOR", type = "ROLE_MONITOR"),
+                @Authorization(value = "ROLE_DFM", type = "ROLE_DFM"),
+                @Authorization(value = "ROLE_ADMIN", type = "ROLE_ADMIN")
+            }
+    )
+    @ApiResponses(
+            value = {
+                @ApiResponse(code = 403, message = "Client is not authorized to make this request")
+            }
+    )
     public Response getProcessor(@QueryParam(CLIENT_ID) @DefaultValue(StringUtils.EMPTY) ClientIdParameter clientId, @PathParam("id") String id) {
 
         // replicate if cluster manager

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProvenanceResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProvenanceResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProvenanceResource.java
index 5fef27f..780bb6a 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProvenanceResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProvenanceResource.java
@@ -16,6 +16,7 @@
  */
 package org.apache.nifi.web.api;
 
+import com.wordnik.swagger.annotations.Api;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -85,6 +86,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 /**
  * RESTful endpoint for querying data provenance.
  */
+@Api(hidden = true)
 public class ProvenanceResource extends ApplicationResource {
 
     private static final Logger logger = LoggerFactory.getLogger(ProvenanceResource.class);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/RemoteProcessGroupResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/RemoteProcessGroupResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/RemoteProcessGroupResource.java
index b171835..593a018 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/RemoteProcessGroupResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/RemoteProcessGroupResource.java
@@ -16,6 +16,7 @@
  */
 package org.apache.nifi.web.api;
 
+import com.wordnik.swagger.annotations.Api;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.HashMap;
@@ -69,6 +70,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 /**
  * RESTful endpoint for managing a Remote group.
  */
+@Api(hidden = true)
 public class RemoteProcessGroupResource extends ApplicationResource {
 
     private static final Logger logger = LoggerFactory.getLogger(RemoteProcessGroupResource.class);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ReportingTaskResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ReportingTaskResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ReportingTaskResource.java
index 485b8fd..86b4c99 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ReportingTaskResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ReportingTaskResource.java
@@ -16,6 +16,7 @@
  */
 package org.apache.nifi.web.api;
 
+import com.wordnik.swagger.annotations.Api;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.HashMap;
@@ -70,6 +71,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 /**
  * RESTful endpoint for managing a Reporting Task.
  */
+@Api(hidden = true)
 public class ReportingTaskResource extends ApplicationResource {
 
     private static final Logger logger = LoggerFactory.getLogger(ReportingTaskResource.class);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SnippetResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SnippetResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SnippetResource.java
index 275b133..6d67028 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SnippetResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SnippetResource.java
@@ -17,6 +17,7 @@
 package org.apache.nifi.web.api;
 
 import com.sun.jersey.api.core.ResourceContext;
+import com.wordnik.swagger.annotations.Api;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.HashMap;
@@ -61,6 +62,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 /**
  * RESTful endpoint for managing a Snippet.
  */
+@Api(hidden = true)
 public class SnippetResource extends ApplicationResource {
 
     private static final Logger logger = LoggerFactory.getLogger(SnippetResource.class);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SystemDiagnosticsResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SystemDiagnosticsResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SystemDiagnosticsResource.java
index 915c55e..1177c5d 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SystemDiagnosticsResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SystemDiagnosticsResource.java
@@ -16,6 +16,7 @@
  */
 package org.apache.nifi.web.api;
 
+import com.wordnik.swagger.annotations.Api;
 import javax.ws.rs.DefaultValue;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -40,6 +41,10 @@ import org.springframework.security.access.prepost.PreAuthorize;
  * RESTful endpoint for retrieving system diagnostics.
  */
 @Path("/system-diagnostics")
+@Api(
+        value = "/system-diagnostics",
+        description = "Provides diagnostics for the system NiFi is running on"
+)
 public class SystemDiagnosticsResource extends ApplicationResource {
 
     private static final Logger logger = LoggerFactory.getLogger(SystemDiagnosticsResource.class);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/TemplateResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/TemplateResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/TemplateResource.java
index 24292e9..5fac113 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/TemplateResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/TemplateResource.java
@@ -17,6 +17,7 @@
 package org.apache.nifi.web.api;
 
 import com.sun.jersey.multipart.FormDataParam;
+import com.wordnik.swagger.annotations.Api;
 import java.io.InputStream;
 import java.net.URI;
 import java.util.Date;
@@ -61,6 +62,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 /**
  * RESTful endpoint for managing a Template.
  */
+@Api(hidden = true)
 public class TemplateResource extends ApplicationResource {
 
     private static final Logger logger = LoggerFactory.getLogger(TemplateResource.class);

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/UserGroupResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/UserGroupResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/UserGroupResource.java
index 573c407..594c67d 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/UserGroupResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/UserGroupResource.java
@@ -16,6 +16,7 @@
  */
 package org.apache.nifi.web.api;
 
+import com.wordnik.swagger.annotations.Api;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
@@ -50,6 +51,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 /**
  * RESTful endpoint for managing this Controller's user groups.
  */
+@Api(hidden = true)
 public class UserGroupResource extends ApplicationResource {
 
     /*

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/UserResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/UserResource.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/UserResource.java
index 09307c8..a413cfe 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/UserResource.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/UserResource.java
@@ -16,6 +16,7 @@
  */
 package org.apache.nifi.web.api;
 
+import com.wordnik.swagger.annotations.Api;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -62,6 +63,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 /**
  * RESTful endpoint for managing this Controller's users.
  */
+@Api(hidden = true)
 public class UserResource extends ApplicationResource {
 
     /*

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/resources/templates/endpoint.hbs
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/resources/templates/endpoint.hbs b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/resources/templates/endpoint.hbs
new file mode 100644
index 0000000..ce2f7d5
--- /dev/null
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/resources/templates/endpoint.hbs
@@ -0,0 +1,60 @@
+{{!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+        http://www.apache.org/licenses/LICENSE-2.0
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+--}}
+<div class="endpoints">
+    {{#post}}
+        <div class="endpoint post">
+            <div class="operation-handle">
+                <div class="method">POST</div>
+                <div class="path">{{@key}}</div>
+                <div class="summary">{{summary}}</div>
+                <div class="clear"></div>
+            </div>
+            {{> operation}}
+        </div>
+    {{/post}}
+    {{#get}}
+        <div class="endpoint get">
+            <div class="operation-handle">
+                <div class="method">GET</div>
+                <div class="path">{{@key}}</div>
+                <div class="summary">{{summary}}</div>
+                <div class="clear"></div>
+            </div>
+            {{> operation}}
+        </div>
+    {{/get}}
+    {{#put}}
+        <div class="endpoint put">
+            <div class="operation-handle">
+                <div class="method">PUT</div>
+                <div class="path">{{@key}}</div>
+                <div class="summary">{{summary}}</div>
+                <div class="clear"></div>
+            </div>
+            {{> operation}}
+        </div>
+    {{/put}}
+    {{#delete}}
+        <div class="endpoint delete">
+            <div class="operation-handle">
+                <div class="method">DELETE</div>
+                <div class="path">{{@key}}</div>
+                <div class="summary">{{summary}}</div>
+                <div class="clear"></div>
+            </div>
+            {{> operation}}
+        </div>
+    {{/delete}}
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/resources/templates/index.html.hbs
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/resources/templates/index.html.hbs b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/resources/templates/index.html.hbs
new file mode 100644
index 0000000..e169e4e
--- /dev/null
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/resources/templates/index.html.hbs
@@ -0,0 +1,170 @@
+<!DOCTYPE html>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+        http://www.apache.org/licenses/LICENSE-2.0
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<html>
+    <head>
+        <title>{{info.title}}-{{info.version}}</title>
+        <script type="text/javascript" src="../nifi/js/jquery/jquery-2.1.1.min.js"></script>
+        <script type="text/javascript">
+            if (typeof window.jQuery === 'undefined') {
+                document.write(unescape('%3Cscript src="https://code.jquery.com/jquery-2.1.1.min.js" type="text/javascript" %3E%3C/script%3E'));
+            }
+        </script>
+        <style>
+            @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic|Noto+Serif:400,400italic,700,700italic|Droid+Sans+Mono:400";
+
+            html, html a {
+                -webkit-font-smoothing: antialiased;
+                text-shadow: 1px 1px 1px rgba(0,0,0,0.004);
+            }
+
+            body {
+                width: 62.5em;
+                margin: 0 auto;
+                display: block;
+                font-family: "Open Sans", "DejaVu Sans", sans-serif;
+            }
+            
+            div.endpoint {
+                margin-bottom: 10px;
+            }
+
+            /* get */
+            
+            div.endpoint.get {
+                border: 1px solid #174961;
+            }
+            
+            div.get div.operation-handle {
+                background-color: rgba(23, 73, 97, .15);
+            }
+            
+            div.get div.method {
+                background-color: #174961;
+            }
+            
+            div.get div.operation {
+                border-top: 1px solid #174961;
+            }
+            
+            /* post */
+            
+            div.endpoint.post {
+                border: 1px solid #7298AC;
+            }
+            
+            div.post div.operation-handle {
+                background-color: rgba(114, 152, 172, .15);
+            }
+            
+            div.post div.method {
+                background-color: #7298AC;
+            }
+            
+            div.post div.operation {
+                border-top: 1px solid #7298AC;
+            }
+            
+            /* put */
+            
+            div.endpoint.put {
+                border: 1px solid #063046;
+            }
+            
+            div.put div.operation-handle {
+                background-color: rgba(6, 48, 70, .15);
+            }
+            
+            div.put div.method {
+                background-color: #063046;
+            }
+            
+            div.put div.operation {
+                border-top: 1px solid #063046;
+            }
+            
+            /* delete */
+            
+            div.endpoint.delete {
+                border: 1px solid #47758E;
+            }
+            
+            div.delete div.operation-handle {
+                background-color: rgba(71, 117, 142, .15);
+            }
+            
+            div.delete div.method {
+                background-color: #47758E;
+            }
+            
+            div.delete div.operation {
+                border-top: 1px solid #47758E;
+            }
+            
+            div.operation-handle {
+                cursor: pointer;
+                padding-right: 5px;
+                height: 22px;
+            }
+            
+            div.method {
+                float: left;
+                width: 75px;
+                color: #fff;
+                text-align: center;
+                background-color: #7098ad;
+                margin-right: 10px;
+                font-weight: bold;
+            }
+
+            div.path {
+                float: left;
+                line-height: 22px;
+                font-family: monospace;
+            }
+
+            div.summary {
+                float: right;
+                font-size: 12px;
+                line-height: 22px;
+            }
+
+            div.operation {
+                padding: 5px;
+            }
+
+            div.clear {
+                clear: both;
+            }
+
+            .hidden {
+                display: none;
+            }
+        </style>
+        <script type="text/javascript">
+            $(document).ready(function () {
+                $('div.operation-handle').on('click', function () {
+                    $(this).next('div.operation').toggle();
+                });
+            });
+        </script>
+    </head>
+    <body>
+
+        {{#each paths}}
+            {{> endpoint}}
+        {{/each}}
+    </body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/524606ca/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/resources/templates/operation.hbs
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/resources/templates/operation.hbs b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/resources/templates/operation.hbs
new file mode 100644
index 0000000..11e8992
--- /dev/null
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/resources/templates/operation.hbs
@@ -0,0 +1,93 @@
+{{!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+        http://www.apache.org/licenses/LICENSE-2.0
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+--}}
+<div class="operation hidden">
+    {{description}}
+</div>
+
+{{!--
+{{#deprecated}}-deprecated-{{/deprecated}}
+{{summary}}
+
+{{description}}
+
+{{#if externalDocs.url}}{{externalDocs.description}}. [See external documents for more details]({{externalDocs.url}})
+{{/if}}
+
+{{#if security}}
+#### Security
+{{/if}}
+
+{{#security}}
+{{#each this}}
+* {{@key}}
+{{#this}}   * {{this}}
+{{/this}}
+{{/each}}
+{{/security}}
+
+#### Request
+
+{{#if consumes}}
+**Content-Type: ** {{join consumes ", "}}{{/if}}
+
+##### Parameters
+{{#if parameters}}
+<table border="1">
+    <tr>
+        <th>Name</th>
+        <th>Located in</th>
+        <th>Required</th>
+        <th>Description</th>
+        <th>Default</th>
+        <th>Schema</th>
+    </tr>
+{{/if}}
+
+{{#parameters}}
+<tr>
+    <th>{{name}}</th>
+    <td>{{in}}</td>
+    <td>{{#if required}}yes{{else}}no{{/if}}</td>
+    <td>{{description}}</td>
+    <td> - </td>
+{{#ifeq in "body"}}
+    <td>
+    {{#ifeq schema.type "array"}}Array[<a href="#/definitions/{{basename schema.items.$ref}}">{{basename schema.items.$ref}}</a>]{{/ifeq}}
+    {{#schema.$ref}}<a href="{{schema.$ref}}">{{basename schema.$ref}}</a> {{/schema.$ref}}
+    </td>
+{{else}}
+    {{#ifeq type "array"}}
+            <td>Array[{{items.type}}] ({{collectionFormat}})</td>
+    {{else}}
+            <td>{{type}} {{#format}}({{format}}){{/format}}</td>
+    {{/ifeq}}
+{{/ifeq}}
+</tr>
+{{/parameters}}
+{{#if parameters}}
+</table>
+{{/if}}
+
+
+#### Response
+
+{{#if produces}}**Content-Type: ** {{join produces ", "}}{{/if}}
+
+
+| Status Code | Reason      | Response Model |
+|-------------|-------------|----------------|
+{{#each responses}}| {{@key}}    | {{description}} | {{#schema.$ref}}<a href="{{schema.$ref}}">{{basename schema.$ref}}</a>{{/schema.$ref}}{{#ifeq schema.type "array"}}Array[<a href="{{schema.items.$ref}}">{{basename schema.items.$ref}}</a>]{{/ifeq}}{{^schema}} - {{/schema}}|
+{{/each}}
+--}}
\ No newline at end of file