You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sqoop.apache.org by ja...@apache.org on 2013/08/24 23:09:08 UTC
git commit: SQOOP-924: Sqoop2: Devguide: Describe wire protocol
Updated Branches:
refs/heads/sqoop2 48530e3f8 -> 7f2712b75
SQOOP-924: Sqoop2: Devguide: Describe wire protocol
(Mengwei Ding via Jarek Jarcec Cecho)
Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/7f2712b7
Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/7f2712b7
Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/7f2712b7
Branch: refs/heads/sqoop2
Commit: 7f2712b75e19e94e4dbc27126d4c23f2faaf88f3
Parents: 48530e3
Author: Jarek Jarcec Cecho <ja...@apache.org>
Authored: Sat Aug 24 14:08:38 2013 -0700
Committer: Jarek Jarcec Cecho <ja...@apache.org>
Committed: Sat Aug 24 14:08:38 2013 -0700
----------------------------------------------------------------------
docs/src/site/sphinx/RESTAPI.rst | 1766 +++++++++++++++++++++++++++++++++
docs/src/site/sphinx/index.rst | 1 +
2 files changed, 1767 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/sqoop/blob/7f2712b7/docs/src/site/sphinx/RESTAPI.rst
----------------------------------------------------------------------
diff --git a/docs/src/site/sphinx/RESTAPI.rst b/docs/src/site/sphinx/RESTAPI.rst
new file mode 100644
index 0000000..04908e8
--- /dev/null
+++ b/docs/src/site/sphinx/RESTAPI.rst
@@ -0,0 +1,1766 @@
+.. 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.
+
+=========================
+Sqoop REST API Guide
+=========================
+
+This document will explain you how to use Sqoop Network API to allow external applications interacting with Sqoop server.
+The REST API is a lower level API than the `Sqoop client API <ClientAPI.html>`_, which gives you the freedom to execute commands in Sqoop
+server with any tools or programming language. Generally, the REST API is leveraged via HTTP requests and use ``JSON`` format to encode data content.
+
+.. contents:: Table of Contents
+
+Initialization
+=========================
+
+Before making any move, make sure that the Sqoop server is running.
+
+Then find out three pieces of information about the Sqoop server: ``host``, ``port`` and ``webapp``, and keep them in mind.
+
+To execute a function of Sqoop, you could assemble and send a HTTP request to an url of that function in Sqoop. Generally, the url
+contain the ``host`` has the hostname, the ``port`` as the port number and ``webapp`` as the root directory of the url, which follows
+any functions available in this page.
+
+The request and its response might need to contain some additional parameters and contents. These parameters could be given via
+HTTP header, body or both. All the content in the HTTP body is in ``JSON`` format.
+
+Understand Connector, Connection, Job and Framework
+===========================================================
+
+To create and run a Sqoop task, we need to provide a bunch of parameters. All these parameters are provide via Input.
+
+Some of these parameters are connector specific, which are needed for a connector. And the other parameters
+might be required all the times. Sqoop provides these specifications via forms, each of which is a list of inputs. Each connector claims its own
+forms. And the Sqoop framework claims global forms.
+
+On the other hand, some of these parameters are stable for different jobs, like the url, the username and the password of database. And some
+of them are job specific. Therefore Sqoop categorizes these parameters into 2 groups, which are connection object and job object. So, for
+each connector and the framework, it has to provide forms for connection and job, respectively.
+
+Objects
+==============
+
+This section covers all the objects that might exist in the request or response.
+
+Form
+----------
+
+Before creating any connection or job, the first thing to do is getting familiar with all forms in the connector and the framework, via Get Connector
+and Get Framework HTTP requests.
+
+Each form is structured below:
+
++------------------+---------------------------------------------------------+
+| Field | Description |
++==================+=========================================================+
+| ``id`` | The id of this form |
++------------------+---------------------------------------------------------+
+| ``inputs`` | A array of input fields of this form |
++------------------+---------------------------------------------------------+
+| ``name`` | The name of this form |
++------------------+---------------------------------------------------------+
+| ``type`` | The type of this form (CONNECTION/JOB) |
++------------------+---------------------------------------------------------+
+
+A typical form object is showing below:
+
+::
+
+ {
+ "id":3,
+ "inputs":[
+ {
+ "id":13,
+ "name":"table.schemaName",
+ "type":"STRING",
+ "size":50,
+ "sensitive":false
+ }
+ ],
+ "name":"table",
+ "type":"CONNECTION"
+ }
+
+Each input object in a form is structured below:
+
++------------------+---------------------------------------------------------+
+| Field | Description |
++==================+=========================================================+
+| ``id`` | The id of this input |
++------------------+---------------------------------------------------------+
+| ``name`` | The name of this input |
++------------------+---------------------------------------------------------+
+| ``type`` | The data type of this input field |
++------------------+---------------------------------------------------------+
+| ``size`` | The length of this input field |
++------------------+---------------------------------------------------------+
+| ``sensitive`` | Whether this input contain sensitive information |
++------------------+---------------------------------------------------------+
+
+The connector and framework have both ``job-forms`` and ``conn-forms``, each of which is a array of forms. In ``job-forms``,
+there are 2 arrays of forms, for ``IMPORT`` and ``EXPORT``, job respectively.
+
+To send a filled form in the request, you should always use form id and input id to map the values to inputs. For example, the
+following request contains a input value ``com.mysql.jdbc.Driver`` for input ``1`` in form ``1`` of connector and an input value
+``10`` for input ``17`` in form ``4`` of framework.
+
+::
+
+ {
+ "connector":[
+ {
+ "id":1,
+ "inputs":[
+ {
+ "id":1,
+ "name":"connection.jdbcDriver",
+ "value":"com.mysql.jdbc.Driver",
+ "type":"STRING",
+ "size":128,
+ "sensitive":false
+ },
+ ],
+ "name":"connection",
+ "type":"CONNECTION"
+ }
+ ],
+ "connector-id":1,
+ "framework":[
+ {
+ "id":4,
+ "inputs":[
+ {
+ "id":17,
+ "name":"security.maxConnections",
+ "value":"10",
+ "type":"INTEGER",
+ "sensitive":false
+ }
+ ],
+ "name":"security",
+ "type":"CONNECTION"
+ }
+ ]
+ }
+
+Exception
+---------------
+
+Each operation on Sqoop server might return an exception in the Http response. Remember to take this into account.
+
+The exception code and message could be found in both the header and body of the response, if happens.
+
+Please jump to "Header Parameters" section to find how to get exception information from header.
+
+In the body, the exception is expressed in ``JSON`` format. An example of the exception is:
+
+::
+
+ {
+ "message":"DERBYREPO_0030:Unable to load specific job metadata from repository - Couldn't find job with id 2",
+ "stack-trace":[
+ {
+ "file":"DerbyRepositoryHandler.java",
+ "line":1111,
+ "class":"org.apache.sqoop.repository.derby.DerbyRepositoryHandler",
+ "method":"findJob"
+ },
+ {
+ "file":"JdbcRepository.java",
+ "line":451,
+ "class":"org.apache.sqoop.repository.JdbcRepository$16",
+ "method":"doIt"
+ },
+ {
+ "file":"JdbcRepository.java",
+ "line":90,
+ "class":"org.apache.sqoop.repository.JdbcRepository",
+ "method":"doWithConnection"
+ },
+ {
+ "file":"JdbcRepository.java",
+ "line":61,
+ "class":"org.apache.sqoop.repository.JdbcRepository",
+ "method":"doWithConnection"
+ },
+ {
+ "file":"JdbcRepository.java",
+ "line":448,
+ "class":"org.apache.sqoop.repository.JdbcRepository",
+ "method":"findJob"
+ },
+ {
+ "file":"JobRequestHandler.java",
+ "line":238,
+ "class":"org.apache.sqoop.handler.JobRequestHandler",
+ "method":"getJobs"
+ }
+ ],
+ "class":"org.apache.sqoop.common.SqoopException"
+ }
+
+Form Validation Status
+---------------------------
+
+After submitting the forms of creating/updating connection/job, the server will validate these forms and send
+back feedbacks to show the validation status.
+
+There are 3 possible status:
+
++------------------+---------------------------------------------------------+
+| Status | Description |
++==================+=========================================================+
+| ``FINE`` | No issues, no warnings. Everything is perfect |
++------------------+---------------------------------------------------------+
+| ``ACCEPTABLE`` | No issues, but might be some warnings. Good to go. |
++------------------+---------------------------------------------------------+
+| ``UNACCEPTABLE`` | The form has severe issues needed to be fixed |
++------------------+---------------------------------------------------------+
+
+An example of a good status is:
+
+::
+
+ {
+ "status":"FINE",
+ "messages":{}
+ }
+
+A bad status might be:
+
+::
+
+ {
+ "message":"Can't load specified driver",
+ "status":"UNACCEPTABLE"
+ }
+
+Job Status
+-------------------
+
+After submitting a job, you could look up the running status of it. There could be 7 possible status:
+
++-----------------------------+---------------------------------------------------------+
+| Status | Description |
++=============================+=========================================================+
+| ``BOOTING`` | In the middle of submitting the job |
++-----------------------------+---------------------------------------------------------+
+| ``FAILURE_ON_SUBMIT`` | Unable to submit this job to remote cluster |
++-----------------------------+---------------------------------------------------------+
+| ``RUNNING`` | The job is running now |
++-----------------------------+---------------------------------------------------------+
+| ``SUCCEEDED`` | Job finished successfully |
++-----------------------------+---------------------------------------------------------+
+| ``FAILED`` | Job failed |
++-----------------------------+---------------------------------------------------------+
+| ``NEVER_EXECUTED`` | The job has never been executed since created |
++-----------------------------+---------------------------------------------------------+
+| ``UNKNOWN`` | The status is unknown |
++-----------------------------+---------------------------------------------------------+
+
+Header Parameters
+======================
+
+For all Sqoop requests, the following header parameters are supported:
+
++---------------------------+----------+---------------------------------------------------------+
+| Parameter | Required | Description |
++===========================+==========+=========================================================+
+| ``sqoop-user-name`` | true | The name of the user who makes the requests |
++---------------------------+----------+---------------------------------------------------------+
+
+For all the responses, the following parameters in the HTTP message header are available:
+
++---------------------------+----------+------------------------------------------------------------------------------+
+| Parameter | Required | Description |
++===========================+==========+==============================================================================+
+| ``sqoop-error-code`` | false | The error code when some error happen in the server side for this request |
++---------------------------+----------+------------------------------------------------------------------------------+
+| ``sqoop-error-message`` | false | The explanation for a error code |
++---------------------------+----------+------------------------------------------------------------------------------+
+
+So far, there are only these 2 parameters in the header of response message. They only exist when something bad happen in the server.
+And they always come along with an exception message in the response body.
+
+Functions
+==================
+
+The section elaborates all the functions that are supported by the Sqoop server.
+
+/version - [GET] - Get Sqoop Version
+-------------------------------------------
+
+Get all the version metadata of Sqoop software in the server side.
+
+* Method: ``GET``
+* Format: ``JSON``
+* Request Content: ``None``
+* Fields of Response:
+
++---------------+---------------------------------------------------------+
+| Field | Description |
++===============+=========================================================+
+| ``revision`` | The revision number of Sqoop source code |
++---------------+---------------------------------------------------------+
+| ``protocols`` | The version of network protocol |
++---------------+---------------------------------------------------------+
+| ``date`` | The Sqoop release date |
++---------------+---------------------------------------------------------+
+| ``user`` | The user who made the release |
++---------------+---------------------------------------------------------+
+| ``url`` | The url of the source code trunk |
++---------------+---------------------------------------------------------+
+| ``version`` | The version of Sqoop in the server side |
++---------------+---------------------------------------------------------+
+
+
+* Response Example:
+
+::
+
+ {
+ "revision":"e56c977b56f4dc32a4cad06a328bad11e0d0055b",
+ "protocols":["1"],
+ "date":"Wed Aug 7 13:31:36 PDT 2013",
+ "user":"mengwei.ding",
+ "url":"git:\/\/mding-MBP.local\/Users\/mengwei.ding\/Documents\/workspace\/sqoop2\/common",
+ "version":"2.0.0-SNAPSHOT"
+ }
+
+/v1/connector/[cid] - [GET] - Get Connector
+---------------------------------------------------
+
+Retrieve all the metadata of a given connector, such as its forms to be filled for jobs and connections, the explanation
+for each fields of these forms.
+
+Provide the id of the connector in the url ``[cid]`` part. If you provide ``all`` in the ``[cid]`` part in the url, you will
+get the metadata of all connectors.
+
+* Method: ``GET``
+* Format: ``JSON``
+* Request Content: ``None``
+* Fields of Response:
+
++--------------------------+--------------------------------------------------------------------------+
+| Field | Description |
++==========================+==========================================================================+
+| ``resources-connector`` | All resources for the given connector |
++--------------------------+--------------------------------------------------------------------------+
+| ``all`` | All metadata about the given connector, such as id, name and all forms |
++--------------------------+--------------------------------------------------------------------------+
+
+If all connectors are retrieved, the ``resources-connector`` and ``all`` fields will become arrays and contain data for all connectors.
+
+So far, the resource contains only explanations for fields of forms. For example, in the IMPORT job form, you could find a field called
+``table.schemaName``. If you have no idea about what that field means, you could go the resource for help.
+
+* Response Example:
+
+::
+
+ {
+ "resources-connector":{
+ "1":{
+ "ignored.label":"Ignored",
+ "table.partitionColumn.help":"A specific column for data partition",
+ "table.label":"Database configuration",
+ "table.boundaryQuery.label":"Boundary query",
+ "ignored.help":"This is completely ignored",
+ "ignored.ignored.label":"Ignored",
+ "connection.jdbcProperties.help":"Enter any JDBC properties that should be supplied during the creation of connection.",
+ "table.tableName.help":"Table name to process data in the remote database",
+ "connection.jdbcDriver.label":"JDBC Driver Class",
+ "connection.username.help":"Enter the username to be used for connecting to the database.",
+ "table.help":"You must supply the information requested in order to create a job object.",
+ "table.partitionColumn.label":"Partition column name",
+ "ignored.ignored.help":"This is completely ignored",
+ "table.partitionColumnNull.label":"Nulls in partition column",
+ "table.warehouse.label":"Data warehouse",
+ "table.boundaryQuery.help":"The boundary query for data partition",
+ "connection.username.label":"Username",
+ "connection.jdbcDriver.help":"Enter the fully qualified class name of the JDBC driver that will be used for establishing this connection.",
+ "connection.label":"Connection configuration",
+ "table.columns.label":"Table column names",
+ "table.dataDirectory.label":"Data directory",
+ "table.partitionColumnNull.help":"Whether there are null values in partition column",
+ "connection.password.label":"Password",
+ "table.warehouse.help":"The root directory for data",
+ "table.sql.label":"Table SQL statement",
+ "table.sql.help":"SQL statement to process data in the remote database",
+ "table.schemaName.help":"Schema name to process data in the remote database",
+ "connection.jdbcProperties.label":"JDBC Connection Properties",
+ "table.columns.help":"Specific columns of a table name or a table SQL",
+ "connection.connectionString.help":"Enter the value of JDBC connection string to be used by this connector for creating connections.",
+ "table.dataDirectory.help":"The sub-directory under warehouse for data",
+ "table.schemaName.label":"Schema name",
+ "connection.connectionString.label":"JDBC Connection String",
+ "connection.help":"You must supply the information requested in order to create a connection object.",
+ "connection.password.help":"Enter the password to be used for connecting to the database.",
+ "table.tableName.label":"Table name"
+ }
+ },
+ "all":[
+ {
+ "id":1,
+ "name":"generic-jdbc-connector",
+ "class":"org.apache.sqoop.connector.jdbc.GenericJdbcConnector",
+ "job-forms":{
+ "IMPORT":[
+ {
+ "id":2,
+ "inputs":[
+ {
+ "id":6,
+ "name":"table.schemaName",
+ "type":"STRING",
+ "size":50,
+ "sensitive":false
+ },
+ {
+ "id":7,
+ "name":"table.tableName",
+ "type":"STRING",
+ "size":50,
+ "sensitive":false
+ },
+ {
+ "id":8,
+ "name":"table.sql",
+ "type":"STRING",
+ "size":2000,
+ "sensitive":false
+ },
+ {
+ "id":9,
+ "name":"table.columns",
+ "type":"STRING",
+ "size":50,
+ "sensitive":false
+ },
+ {
+ "id":10,
+ "name":"table.partitionColumn",
+ "type":"STRING",
+ "size":50,
+ "sensitive":false
+ },
+ {
+ "id":11,
+ "name":"table.partitionColumnNull",
+ "type":"BOOLEAN",
+ "sensitive":false
+ },
+ {
+ "id":12,
+ "name":"table.boundaryQuery",
+ "type":"STRING",
+ "size":50,
+ "sensitive":false
+ }
+ ],
+ "name":"table",
+ "type":"CONNECTION"
+ }
+ ],
+ "EXPORT":[
+ {
+ "id":3,
+ "inputs":[
+ {
+ "id":13,
+ "name":"table.schemaName",
+ "type":"STRING",
+ "size":50,
+ "sensitive":false
+ },
+ {
+ "id":14,
+ "name":"table.tableName",
+ "type":"STRING",
+ "size":2000,
+ "sensitive":false
+ },
+ {
+ "id":15,
+ "name":"table.sql",
+ "type":"STRING",
+ "size":50,
+ "sensitive":false
+ },
+ {
+ "id":16,
+ "name":"table.columns",
+ "type":"STRING",
+ "size":50,
+ "sensitive":false
+ }
+ ],
+ "name":"table",
+ "type":"CONNECTION"
+ }
+ ]
+ },
+ "con-forms":[
+ {
+ "id":1,
+ "inputs":[
+ {
+ "id":1,
+ "name":"connection.jdbcDriver",
+ "type":"STRING",
+ "size":128,
+ "sensitive":false
+ },
+ {
+ "id":2,
+ "name":"connection.connectionString",
+ "type":"STRING",
+ "size":128,
+ "sensitive":false
+ },
+ {
+ "id":3,
+ "name":"connection.username",
+ "type":"STRING",
+ "size":40,
+ "sensitive":false
+ },
+ {
+ "id":4,
+ "name":"connection.password",
+ "type":"STRING",
+ "size":40,
+ "sensitive":true
+ },
+ {
+ "id":5,
+ "name":"connection.jdbcProperties",
+ "type":"MAP",
+ "sensitive":false
+ }
+ ],
+ "name":"connection",
+ "type":"CONNECTION"
+ }
+ ],
+ "version":"2.0.0-SNAPSHOT"
+ }
+ ]
+ }
+
+
+/v1/framework - [GET]- Get Sqoop Framework
+-----------------------------------------------
+
+Retrieve all metadata of Sqoop framework. The metadata include all the form fields that are required to all Sqoop objects, such as connection and jobs.
+
+* Method: ``GET``
+* Format: ``JSON``
+* Request Content: ``None``
+* Fields of Response:
+
++--------------------------+----------------------------------------------------------------------------------------------------+
+| Field | Description |
++==========================+====================================================================================================+
+| ``id`` | The id for Sqoop framework (It should be always be 1, since there is always 1 framework out there) |
++--------------------------+----------------------------------------------------------------------------------------------------+
+| ``resources`` | All resources for Sqoop framework |
++--------------------------+----------------------------------------------------------------------------------------------------+
+| ``framework-version`` | The version of Sqoop framework |
++--------------------------+----------------------------------------------------------------------------------------------------+
+| ``job-forms`` | Framework's Job Configuration forms |
++--------------------------+----------------------------------------------------------------------------------------------------+
+| ``con-forms`` | Framework's connection configuration forms |
++--------------------------+----------------------------------------------------------------------------------------------------+
+
+The framework and connector might contain several forms to be filled for job or connection object. Many parameters for job and connection
+are categorize into different classes, which are know as forms. Each form has its id and name. In job and connection objects, they use
+the id of the form to track these parameter inputs.
+
+* Response Example:
+
+::
+
+ {
+ "id":1,
+ "resources":{
+ "output.label":"Output configuration",
+ "security.maxConnections.help":"Maximal number of connections that this connection object can use at one point in time",
+ "output.storageType.label":"Storage type",
+ "output.ignored.help":"This value is ignored",
+ "input.label":"Input configuration",
+ "security.help":"You must supply the information requested in order to create a job object.",
+ "output.storageType.help":"Target on Hadoop ecosystem where to store data",
+ "input.inputDirectory.help":"Directory that should be exported",
+ "output.outputFormat.label":"Output format",
+ "output.ignored.label":"Ignored",
+ "output.outputFormat.help":"Format in which data should be serialized",
+ "output.help":"You must supply the information requested in order to get information where you want to store your data.",
+ "throttling.help":"Set throttling boundaries to not overload your systems",
+ "input.inputDirectory.label":"Input directory",
+ "throttling.loaders.label":"Loaders",
+ "input.help":"Specifies information required to get data from Hadoop ecosystem",
+ "throttling.extractors.label":"Extractors",
+ "throttling.extractors.help":"Number of extractors that Sqoop will use",
+ "security.label":"Security related configuration options",
+ "throttling.label":"Throttling resources",
+ "throttling.loaders.help":"Number of loaders that Sqoop will use",
+ "output.outputDirectory.help":"Output directory for final data",
+ "security.maxConnections.label":"Max connections",
+ "output.outputDirectory.label":"Output directory"
+ },
+ "framework-version":"1",
+ "job-forms":{
+ "IMPORT":[
+ {
+ "id":5,
+ "inputs":[
+ {
+ "id":18,
+ "values":"HDFS",
+ "name":"output.storageType",
+ "type":"ENUM",
+ "sensitive":false
+ },
+ {
+ "id":19,
+ "values":"TEXT_FILE,SEQUENCE_FILE",
+ "name":"output.outputFormat",
+ "type":"ENUM",
+ "sensitive":false
+ },
+ {
+ "id":20,
+ "name":"output.outputDirectory",
+ "type":"STRING",
+ "size":255,
+ "sensitive":false
+ }
+ ],
+ "name":"output",
+ "type":"CONNECTION"
+ },
+ {
+ "id":6,
+ "inputs":[
+ {
+ "id":21,
+ "name":"throttling.extractors",
+ "type":"INTEGER",
+ "sensitive":false
+ },
+ {
+ "id":22,
+ "name":"throttling.loaders",
+ "type":"INTEGER",
+ "sensitive":false
+ }
+ ],
+ "name":"throttling",
+ "type":"CONNECTION"
+ }
+ ],
+ "EXPORT":[
+ {
+ "id":7,
+ "inputs":[
+ {
+ "id":23,
+ "name":"input.inputDirectory",
+ "type":"STRING",
+ "size":255,
+ "sensitive":false
+ }
+ ],
+ "name":"input",
+ "type":"CONNECTION"
+ },
+ {
+ "id":8,
+ "inputs":[
+ {
+ "id":24,
+ "name":"throttling.extractors",
+ "type":"INTEGER",
+ "sensitive":false
+ },
+ {
+ "id":25,
+ "name":"throttling.loaders",
+ "type":"INTEGER",
+ "sensitive":false
+ }
+ ],
+ "name":"throttling",
+ "type":"CONNECTION"
+ }
+ ]
+ },
+ "con-forms":[
+ {
+ "id":4,
+ "inputs":[
+ {
+ "id":17,
+ "name":"security.maxConnections",
+ "type":"INTEGER",
+ "sensitive":false
+ }
+ ],
+ "name":"security",
+ "type":"CONNECTION"
+ }
+ ]
+ }
+
+/v1/connection/[xid] - [GET] - Get Connection
+----------------------------------------------------
+
+Retrieve all the metadata of a given connection, such as its values for different fields of connector form and sqoop framework form.
+
+Provide the id of the connector in the url [xid] part. If you provide ``all`` in the [xid] part in the url, you will get the metadata of all connections.
+
+* Method: ``GET``
+* Format: ``JSON``
+* Request Content: ``None``
+* Fields of Response:
+
++--------------------------+---------------------------------------------------------------------------------------+
+| Field | Description |
++==========================+=======================================================================================+
+| ``resources-connector`` | All resources for the given connector |
++--------------------------+---------------------------------------------------------------------------------------+
+| ``resources-framework`` | All resources related with Sqoop framework |
++--------------------------+---------------------------------------------------------------------------------------+
+| ``all`` | All metadata about the given connection, such as id, name and all form input values |
++--------------------------+---------------------------------------------------------------------------------------+
+
+* Response Example:
+
+::
+
+ {
+ "resources-connector":{
+ "1":{
+ "ignored.label":"Ignored",
+ "table.partitionColumn.help":"A specific column for data partition",
+ "table.label":"Database configuration",
+ "table.boundaryQuery.label":"Boundary query",
+ "ignored.help":"This is completely ignored",
+ "ignored.ignored.label":"Ignored",
+ "connection.jdbcProperties.help":"Enter any JDBC properties that should be supplied during the creation of connection.",
+ "table.tableName.help":"Table name to process data in the remote database",
+ "connection.jdbcDriver.label":"JDBC Driver Class",
+ "connection.username.help":"Enter the username to be used for connecting to the database.",
+ "table.help":"You must supply the information requested in order to create a job object.",
+ "table.partitionColumn.label":"Partition column name",
+ "ignored.ignored.help":"This is completely ignored",
+ "table.partitionColumnNull.label":"Nulls in partition column",
+ "table.warehouse.label":"Data warehouse",
+ "table.boundaryQuery.help":"The boundary query for data partition",
+ "connection.username.label":"Username",
+ "connection.jdbcDriver.help":"Enter the fully qualified class name of the JDBC driver that will be used for establishing this connection.",
+ "connection.label":"Connection configuration",
+ "table.columns.label":"Table column names",
+ "table.dataDirectory.label":"Data directory",
+ "table.partitionColumnNull.help":"Whether there are null values in partition column",
+ "connection.password.label":"Password",
+ "table.warehouse.help":"The root directory for data",
+ "table.sql.label":"Table SQL statement",
+ "table.sql.help":"SQL statement to process data in the remote database",
+ "table.schemaName.help":"Schema name to process data in the remote database",
+ "connection.jdbcProperties.label":"JDBC Connection Properties",
+ "table.columns.help":"Specific columns of a table name or a table SQL",
+ "connection.connectionString.help":"Enter the value of JDBC connection string to be used by this connector for creating connections.",
+ "table.dataDirectory.help":"The sub-directory under warehouse for data",
+ "table.schemaName.label":"Schema name",
+ "connection.connectionString.label":"JDBC Connection String",
+ "connection.help":"You must supply the information requested in order to create a connection object.",
+ "connection.password.help":"Enter the password to be used for connecting to the database.",
+ "table.tableName.label":"Table name"
+ }
+ },
+ "resources-framework":{
+ "output.label":"Output configuration",
+ "security.maxConnections.help":"Maximal number of connections that this connection object can use at one point in time",
+ "output.storageType.label":"Storage type",
+ "output.ignored.help":"This value is ignored",
+ "input.label":"Input configuration",
+ "security.help":"You must supply the information requested in order to create a job object.",
+ "output.storageType.help":"Target on Hadoop ecosystem where to store data",
+ "input.inputDirectory.help":"Directory that should be exported",
+ "output.outputFormat.label":"Output format",
+ "output.ignored.label":"Ignored",
+ "output.outputFormat.help":"Format in which data should be serialized",
+ "output.help":"You must supply the information requested in order to get information where you want to store your data.",
+ "throttling.help":"Set throttling boundaries to not overload your systems",
+ "input.inputDirectory.label":"Input directory",
+ "throttling.loaders.label":"Loaders",
+ "input.help":"Specifies information required to get data from Hadoop ecosystem",
+ "throttling.extractors.label":"Extractors",
+ "throttling.extractors.help":"Number of extractors that Sqoop will use",
+ "security.label":"Security related configuration options",
+ "throttling.label":"Throttling resources",
+ "throttling.loaders.help":"Number of loaders that Sqoop will use",
+ "output.outputDirectory.help":"Output directory for final data",
+ "security.maxConnections.label":"Max connections",
+ "output.outputDirectory.label":"Output directory"
+ },
+ "all":[
+ {
+ "id":1,
+ "enabled":true,
+ "updated":1375912819893,
+ "created":1375912819893,
+ "name":"First connection",
+ "connector":[
+ {
+ "id":1,
+ "inputs":[
+ {
+ "id":1,
+ "name":"connection.jdbcDriver",
+ "value":"com.mysql.jdbc.Driver",
+ "type":"STRING",
+ "size":128,
+ "sensitive":false
+ },
+ {
+ "id":2,
+ "name":"connection.connectionString",
+ "value":"jdbc%3Amysql%3A%2F%2Flocalhost%2Ftest",
+ "type":"STRING",
+ "size":128,
+ "sensitive":false
+ },
+ {
+ "id":3,
+ "name":"connection.username",
+ "value":"root",
+ "type":"STRING",
+ "size":40,
+ "sensitive":false
+ },
+ {
+ "id":4,
+ "name":"connection.password",
+ "type":"STRING",
+ "size":40,
+ "sensitive":true
+ },
+ {
+ "id":5,
+ "name":"connection.jdbcProperties",
+ "type":"MAP",
+ "sensitive":false
+ }
+ ],
+ "name":"connection",
+ "type":"CONNECTION"
+ }
+ ],
+ "connector-id":1,
+ "framework":[
+ {
+ "id":4,
+ "inputs":[
+ {
+ "id":17,
+ "name":"security.maxConnections",
+ "value":"10",
+ "type":"INTEGER",
+ "sensitive":false
+ }
+ ],
+ "name":"security",
+ "type":"CONNECTION"
+ }
+ ]
+ }
+ ]
+ }
+
+/v1/connection - [POST] - Create Connection
+---------------------------------------------------------
+
+Create a new connection object. Try your best to provide values for as many as inputs of
+connection forms from both connectors and framework.
+
+* Method: ``POST``
+* Format: ``JSON``
+* Fields of Request:
+
++--------------------------+--------------------------------------------------------------------------------------+
+| Field | Description |
++==========================+======================================================================================+
+| ``all`` | Request array, in which each element is an independent request |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``id`` | The id of the connection. Useless here, because we don't know the id before creation |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``enabled`` | Whether to enable this connection (true/false) |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``updated`` | The last updated time of this connection |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``created`` | The creation time of this connection |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``name`` | The name of this connection |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``connector`` | Filled inputs for connector forms for this connection |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``connector-id`` | The id of the connector used for this connection |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``framework`` | Filled inputs for framework forms for this connection |
++--------------------------+--------------------------------------------------------------------------------------+
+
+
+* Request Example:
+
+::
+
+ {
+ "all":[
+ {
+ "id":-1,
+ "enabled":true,
+ "updated":1375919952017,
+ "created":1375919952017,
+ "name":"First connection",
+ "connector":[
+ {
+ "id":1,
+ "inputs":[
+ {
+ "id":1,
+ "name":"connection.jdbcDriver",
+ "value":"com.mysql.jdbc.Driver",
+ "type":"STRING",
+ "size":128,
+ "sensitive":false
+ },
+ {
+ "id":2,
+ "name":"connection.connectionString",
+ "value":"jdbc%3Amysql%3A%2F%2Flocalhost%2Ftest",
+ "type":"STRING",
+ "size":128,
+ "sensitive":false
+ },
+ {
+ "id":3,
+ "name":"connection.username",
+ "value":"root",
+ "type":"STRING",
+ "size":40,
+ "sensitive":false
+ },
+ {
+ "id":4,
+ "name":"connection.password",
+ "type":"STRING",
+ "size":40,
+ "sensitive":true
+ },
+ {
+ "id":5,
+ "name":"connection.jdbcProperties",
+ "type":"MAP",
+ "sensitive":false
+ }
+ ],
+ "name":"connection",
+ "type":"CONNECTION"
+ }
+ ],
+ "connector-id":1,
+ "framework":[
+ {
+ "id":4,
+ "inputs":[
+ {
+ "id":17,
+ "name":"security.maxConnections",
+ "value":"10",
+ "type":"INTEGER",
+ "sensitive":false
+ }
+ ],
+ "name":"security",
+ "type":"CONNECTION"
+ }
+ ]
+ }
+ ]
+ }
+
+* Fields of Response:
+
++--------------------------+--------------------------------------------------------------------------------------+
+| Field | Description |
++==========================+======================================================================================+
+| ``id`` | The id assigned for this new created connection |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``connector`` | The validation status for the inputs of connector forms, provided by the request |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``framework`` | The validation status for the inputs of connector forms, provided by the request |
++--------------------------+--------------------------------------------------------------------------------------+
+
+* Response Example:
+
+::
+
+ {
+ "id":1,
+ "connector":{
+ "status":"FINE",
+ "messages":{
+
+ }
+ },
+ "framework":{
+ "status":"FINE",
+ "messages":{
+
+ }
+ }
+ }
+
+/v1/connection/[xid] - [PUT] - Update Connection
+---------------------------------------------------------
+
+Update an existing connection object with id [xid]. To make the procedure of filling inputs easier, the general practice
+is get the connection first and then change some of the inputs.
+
+* Method: ``PUT``
+* Format: ``JSON``
+* Fields of Request:
+
+The same as Create Connection.
+
+* Fields of Response:
+
++--------------------------+--------------------------------------------------------------------------------------+
+| Field | Description |
++==========================+======================================================================================+
+| ``connector`` | The validation status for the inputs of connector forms, provided by the request |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``framework`` | The validation status for the inputs of connector forms, provided by the request |
++--------------------------+--------------------------------------------------------------------------------------+
+
+* Response Example:
+
+::
+
+ {
+ "connector":{
+ "status":"FINE",
+ "messages":{
+
+ }
+ },
+ "framework":{
+ "status":"FINE",
+ "messages":{
+
+ }
+ }
+ }
+
+/v1/connection/[xid] - [DELETE] - Delete Connection
+---------------------------------------------------------
+
+Delete a connection with id ``xid``.
+
+* Method: ``DELETE``
+* Format: ``JSON``
+* Request Content: ``None``
+* Response Content: ``None``
+
+/v1/connection/[xid]/enable - [PUT] - Enable Connection
+---------------------------------------------------------
+
+Enable a connection with id ``xid``.
+
+* Method: ``PUT``
+* Format: ``JSON``
+* Request Content: ``None``
+* Response Content: ``None``
+
+/v1/connection/[xid]/disable - [PUT] - Disable Connection
+---------------------------------------------------------
+
+Disable a connection with id ``xid``.
+
+* Method: ``PUT``
+* Format: ``JSON``
+* Request Content: ``None``
+* Response Content: ``None``
+
+/v1/job/[jid] - [GET] - Get Job
+----------------------------------------
+
+Retrieve all the metadata of a given job, such as its values for different fields of connector form and sqoop framework form.
+
+Provide the id of the job in the url [jid] part. If you provide ``all`` in the [jid] part in the url, you will get the metadata of all connections.
+
+* Method: ``GET``
+* Format: ``JSON``
+* Request Content: ``None``
+* Fields of Response:
+
++--------------------------+--------------------------------------------------------------------------------------+
+| Field | Description |
++==========================+======================================================================================+
+| ``resources-connector`` | All resources for the given connector |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``resources-framework`` | All resources related with Sqoop framework |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``all`` | All metadata about the given job, such as id, name and all form input values |
++--------------------------+--------------------------------------------------------------------------------------+
+
+* Response Example:
+
+::
+
+ {
+ "resources-connector":{
+ "1":{
+ "ignored.label":"Ignored",
+ "table.partitionColumn.help":"A specific column for data partition",
+ "table.label":"Database configuration",
+ "table.boundaryQuery.label":"Boundary query",
+ "ignored.help":"This is completely ignored",
+ "ignored.ignored.label":"Ignored",
+ "connection.jdbcProperties.help":"Enter any JDBC properties that should be supplied during the creation of connection.",
+ "table.tableName.help":"Table name to process data in the remote database",
+ "connection.jdbcDriver.label":"JDBC Driver Class",
+ "connection.username.help":"Enter the username to be used for connecting to the database.",
+ "table.help":"You must supply the information requested in order to create a job object.",
+ "table.partitionColumn.label":"Partition column name",
+ "ignored.ignored.help":"This is completely ignored",
+ "table.partitionColumnNull.label":"Nulls in partition column",
+ "table.warehouse.label":"Data warehouse",
+ "table.boundaryQuery.help":"The boundary query for data partition",
+ "connection.username.label":"Username",
+ "connection.jdbcDriver.help":"Enter the fully qualified class name of the JDBC driver that will be used for establishing this connection.",
+ "connection.label":"Connection configuration",
+ "table.columns.label":"Table column names",
+ "table.dataDirectory.label":"Data directory",
+ "table.partitionColumnNull.help":"Whether there are null values in partition column",
+ "connection.password.label":"Password",
+ "table.warehouse.help":"The root directory for data",
+ "table.sql.label":"Table SQL statement",
+ "table.sql.help":"SQL statement to process data in the remote database",
+ "table.schemaName.help":"Schema name to process data in the remote database",
+ "connection.jdbcProperties.label":"JDBC Connection Properties",
+ "table.columns.help":"Specific columns of a table name or a table SQL",
+ "connection.connectionString.help":"Enter the value of JDBC connection string to be used by this connector for creating connections.",
+ "table.dataDirectory.help":"The sub-directory under warehouse for data",
+ "table.schemaName.label":"Schema name",
+ "connection.connectionString.label":"JDBC Connection String",
+ "connection.help":"You must supply the information requested in order to create a connection object.",
+ "connection.password.help":"Enter the password to be used for connecting to the database.",
+ "table.tableName.label":"Table name"
+ }
+ },
+ "resources-framework":{
+ "output.label":"Output configuration",
+ "security.maxConnections.help":"Maximal number of connections that this connection object can use at one point in time",
+ "output.storageType.label":"Storage type",
+ "output.ignored.help":"This value is ignored",
+ "input.label":"Input configuration",
+ "security.help":"You must supply the information requested in order to create a job object.",
+ "output.storageType.help":"Target on Hadoop ecosystem where to store data",
+ "input.inputDirectory.help":"Directory that should be exported",
+ "output.outputFormat.label":"Output format",
+ "output.ignored.label":"Ignored",
+ "output.outputFormat.help":"Format in which data should be serialized",
+ "output.help":"You must supply the information requested in order to get information where you want to store your data.",
+ "throttling.help":"Set throttling boundaries to not overload your systems",
+ "input.inputDirectory.label":"Input directory",
+ "throttling.loaders.label":"Loaders",
+ "input.help":"Specifies information required to get data from Hadoop ecosystem",
+ "throttling.extractors.label":"Extractors",
+ "throttling.extractors.help":"Number of extractors that Sqoop will use",
+ "security.label":"Security related configuration options",
+ "throttling.label":"Throttling resources",
+ "throttling.loaders.help":"Number of loaders that Sqoop will use",
+ "output.outputDirectory.help":"Output directory for final data",
+ "security.maxConnections.label":"Max connections",
+ "output.outputDirectory.label":"Output directory"
+ },
+ "all":[
+ {
+ "connection-id":1,
+ "id":1,
+ "enabled":true,
+ "updated":1375913231253,
+ "created":1375913231253,
+ "name":"First job",
+ "connector":[
+ {
+ "id":2,
+ "inputs":[
+ {
+ "id":6,
+ "name":"table.schemaName",
+ "value":"test",
+ "type":"STRING",
+ "size":50,
+ "sensitive":false
+ },
+ {
+ "id":7,
+ "name":"table.tableName",
+ "value":"example",
+ "type":"STRING",
+ "size":50,
+ "sensitive":false
+ },
+ {
+ "id":8,
+ "name":"table.sql",
+ "type":"STRING",
+ "size":2000,
+ "sensitive":false
+ },
+ {
+ "id":9,
+ "name":"table.columns",
+ "value":"id%2Cdata",
+ "type":"STRING",
+ "size":50,
+ "sensitive":false
+ },
+ {
+ "id":10,
+ "name":"table.partitionColumn",
+ "value":"id",
+ "type":"STRING",
+ "size":50,
+ "sensitive":false
+ },
+ {
+ "id":11,
+ "name":"table.partitionColumnNull",
+ "value":"true",
+ "type":"BOOLEAN",
+ "sensitive":false
+ },
+ {
+ "id":12,
+ "name":"table.boundaryQuery",
+ "type":"STRING",
+ "size":50,
+ "sensitive":false
+ }
+ ],
+ "name":"table",
+ "type":"CONNECTION"
+ }
+ ],
+ "connector-id":1,
+ "type":"IMPORT",
+ "framework":[
+ {
+ "id":5,
+ "inputs":[
+ {
+ "id":18,
+ "values":"HDFS",
+ "name":"output.storageType",
+ "value":"HDFS",
+ "type":"ENUM",
+ "sensitive":false
+ },
+ {
+ "id":19,
+ "values":"TEXT_FILE,SEQUENCE_FILE",
+ "name":"output.outputFormat",
+ "value":"TEXT_FILE",
+ "type":"ENUM",
+ "sensitive":false
+ },
+ {
+ "id":20,
+ "name":"output.outputDirectory",
+ "value":"%2Ftmp%2Foutput",
+ "type":"STRING",
+ "size":255,
+ "sensitive":false
+ }
+ ],
+ "name":"output",
+ "type":"CONNECTION"
+ },
+ {
+ "id":6,
+ "inputs":[
+ {
+ "id":21,
+ "name":"throttling.extractors",
+ "type":"INTEGER",
+ "sensitive":false
+ },
+ {
+ "id":22,
+ "name":"throttling.loaders",
+ "type":"INTEGER",
+ "sensitive":false
+ }
+ ],
+ "name":"throttling",
+ "type":"CONNECTION"
+ }
+ ]
+ }
+ ]
+ }
+
+/v1/job - [POST] - Create Job
+---------------------------------------------------------
+
+Create a new job object. Try your best to provide values for as many as inputs of
+job forms from both connectors and framework.
+
+* Method: ``POST``
+* Format: ``JSON``
+* Fields of Request:
+
++--------------------------+--------------------------------------------------------------------------------------+
+| Field | Description |
++==========================+======================================================================================+
+| ``all`` | Request array, in which each element is an independent request |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``connection-id`` | The id of the connection used for this job |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``id`` | The id of the job. Useless here, because we don't know the id before creation |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``type`` | The type of this job ("IMPORT"/"EXPORT") |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``enabled`` | Whether to enable this connection (true/false) |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``updated`` | The last updated time of this connection |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``created`` | The creation time of this connection |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``name`` | The name of this connection |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``connector`` | Filled inputs for connector forms for this connection |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``connector-id`` | The id of the connector used for this connection |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``framework`` | Filled inputs for framework forms for this connection |
++--------------------------+--------------------------------------------------------------------------------------+
+
+
+* Request Example:
+
+::
+
+ {
+ "all":[
+ {
+ "connection-id":1,
+ "id":-1,
+ "enabled":true,
+ "updated":1375920083970,
+ "created":1375920083970,
+ "name":"First job",
+ "connector":[
+ {
+ "id":2,
+ "inputs":[
+ {
+ "id":6,
+ "name":"table.schemaName",
+ "value":"test",
+ "type":"STRING",
+ "size":50,
+ "sensitive":false
+ },
+ {
+ "id":7,
+ "name":"table.tableName",
+ "value":"example",
+ "type":"STRING",
+ "size":50,
+ "sensitive":false
+ },
+ {
+ "id":8,
+ "name":"table.sql",
+ "type":"STRING",
+ "size":2000,
+ "sensitive":false
+ },
+ {
+ "id":9,
+ "name":"table.columns",
+ "value":"id%2Cdata",
+ "type":"STRING",
+ "size":50,
+ "sensitive":false
+ },
+ {
+ "id":10,
+ "name":"table.partitionColumn",
+ "value":"id",
+ "type":"STRING",
+ "size":50,
+ "sensitive":false
+ },
+ {
+ "id":11,
+ "name":"table.partitionColumnNull",
+ "value":"true",
+ "type":"BOOLEAN",
+ "sensitive":false
+ },
+ {
+ "id":12,
+ "name":"table.boundaryQuery",
+ "type":"STRING",
+ "size":50,
+ "sensitive":false
+ }
+ ],
+ "name":"table",
+ "type":"CONNECTION"
+ }
+ ],
+ "connector-id":1,
+ "type":"IMPORT",
+ "framework":[
+ {
+ "id":5,
+ "inputs":[
+ {
+ "id":18,
+ "values":"HDFS",
+ "name":"output.storageType",
+ "value":"HDFS",
+ "type":"ENUM",
+ "sensitive":false
+ },
+ {
+ "id":19,
+ "values":"TEXT_FILE,SEQUENCE_FILE",
+ "name":"output.outputFormat",
+ "value":"TEXT_FILE",
+ "type":"ENUM",
+ "sensitive":false
+ },
+ {
+ "id":20,
+ "name":"output.outputDirectory",
+ "value":"%2Ftmp%2Foutput",
+ "type":"STRING",
+ "size":255,
+ "sensitive":false
+ }
+ ],
+ "name":"output",
+ "type":"CONNECTION"
+ },
+ {
+ "id":6,
+ "inputs":[
+ {
+ "id":21,
+ "name":"throttling.extractors",
+ "type":"INTEGER",
+ "sensitive":false
+ },
+ {
+ "id":22,
+ "name":"throttling.loaders",
+ "type":"INTEGER",
+ "sensitive":false
+ }
+ ],
+ "name":"throttling",
+ "type":"CONNECTION"
+ }
+ ]
+ }
+ ]
+ }
+
+* Fields of Response:
+
++--------------------------+--------------------------------------------------------------------------------------+
+| Field | Description |
++==========================+======================================================================================+
+| ``id`` | The id assigned for this new created job |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``connector`` | The validation status for the inputs of connector forms, provided by the request |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``framework`` | The validation status for the inputs of framework forms, provided by the request |
++--------------------------+--------------------------------------------------------------------------------------+
+
+* Response Example:
+
+::
+
+ {
+ "id":1,
+ "connector":{
+ "status":"FINE",
+ "messages":{
+
+ }
+ },
+ "framework":{
+ "status":"FINE",
+ "messages":{
+
+ }
+ }
+ }
+
+/v1/job/[jid] - [PUT] - Update Job
+---------------------------------------------------------
+
+Update an existing job object with id [jid]. To make the procedure of filling inputs easier, the general practice
+is get the existing job object first and then change some of the inputs.
+
+* Method: ``PUT``
+* Format: ``JSON``
+* Fields of Request:
+
+The same as Create Job.
+
+* Fields of Response:
+
++--------------------------+--------------------------------------------------------------------------------------+
+| Field | Description |
++==========================+======================================================================================+
+| ``connector`` | The validation status for the inputs of connector forms, provided by the request |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``framework`` | The validation status for the inputs of framework forms, provided by the request |
++--------------------------+--------------------------------------------------------------------------------------+
+
+* Response Example:
+
+::
+
+ {
+ "connector":{
+ "status":"FINE",
+ "messages":{
+
+ }
+ },
+ "framework":{
+ "status":"FINE",
+ "messages":{
+
+ }
+ }
+ }
+
+/v1/job/[jid] - [DELETE] - Delete Job
+---------------------------------------------------------
+
+Delete a job with id ``jid``.
+
+* Method: ``DELETE``
+* Format: ``JSON``
+* Request Content: ``None``
+* Response Content: ``None``
+
+/v1/job/[jid]/enable - [PUT] - Enable Job
+---------------------------------------------------------
+
+Enable a job with id ``jid``.
+
+* Method: ``PUT``
+* Format: ``JSON``
+* Request Content: ``None``
+* Response Content: ``None``
+
+/v1/job/[jid]/disable - [PUT] - Disable Job
+---------------------------------------------------------
+
+Disable a job with id ``jid``.
+
+* Method: ``PUT``
+* Format: ``JSON``
+* Request Content: ``None``
+* Response Content: ``None``
+
+/v1/submission/history/[jid] - [GET] - Get Job Submission History
+----------------------------------------------------------------------
+
+Retrieve all job submission history of a given job, such as the status, counters and links for those submissions.
+
+Provide the id of the job in the url [jid] part. If you provide ``all`` in the [jid] part in the url, you will get all job submission history of all jobs.
+
+* Method: ``GET``
+* Format: ``JSON``
+* Request Content: ``None``
+* Fields of Response:
+
++--------------------------+--------------------------------------------------------------------------------------+
+| Field | Description |
++==========================+======================================================================================+
+| ``progress`` | The progress of the running Sqoop job |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``job`` | The id of the Sqoop job |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``creation-date`` | The submission timestamp |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``last-update-date`` | The timestamp of the last status update |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``status`` | The status of this job submission |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``external-id`` | The job id of Sqoop job running on Hadoop |
++--------------------------+--------------------------------------------------------------------------------------+
+| ``external-link`` | The link to track the job status on Hadoop |
++--------------------------+--------------------------------------------------------------------------------------+
+
+* Response Example:
+
+::
+
+ {
+ "all":[
+ {
+ "progress":-1.0,
+ "last-update-date":1375913666476,
+ "external-id":"job_201307221513_0009",
+ "status":"SUCCEEDED",
+ "job":1,
+ "creation-date":1375913630576,
+ "external-link":"http:\/\/localhost:50030\/jobdetails.jsp?jobid=job_201307221513_0009",
+ "counters":{
+ "org.apache.hadoop.mapreduce.JobCounter":{
+ "SLOTS_MILLIS_MAPS":59135,
+ "FALLOW_SLOTS_MILLIS_REDUCES":0,
+ "FALLOW_SLOTS_MILLIS_MAPS":0,
+ "TOTAL_LAUNCHED_MAPS":2,
+ "SLOTS_MILLIS_REDUCES":0
+ },
+ "org.apache.hadoop.mapreduce.TaskCounter":{
+ "MAP_INPUT_RECORDS":0,
+ "PHYSICAL_MEMORY_BYTES":231583744,
+ "SPILLED_RECORDS":0,
+ "COMMITTED_HEAP_BYTES":112721920,
+ "CPU_MILLISECONDS":20940,
+ "VIRTUAL_MEMORY_BYTES":1955266560,
+ "SPLIT_RAW_BYTES":223,
+ "MAP_OUTPUT_RECORDS":5
+ },
+ "org.apache.hadoop.mapreduce.FileSystemCounter":{
+ "FILE_WRITE_OPS":0,
+ "FILE_READ_OPS":0,
+ "FILE_LARGE_READ_OPS":0,
+ "FILE_BYTES_READ":0,
+ "HDFS_BYTES_READ":223,
+ "FILE_BYTES_WRITTEN":386286,
+ "HDFS_LARGE_READ_OPS":0,
+ "HDFS_WRITE_OPS":2,
+ "HDFS_READ_OPS":3,
+ "HDFS_BYTES_WRITTEN":72
+ },
+ "org.apache.sqoop.submission.counter.SqoopCounters":{
+ "ROWS_READ":5
+ }
+ }
+ },
+ {
+ "progress":-1.0,
+ "last-update-date":1375913554412,
+ "external-id":"job_201307221513_0008",
+ "status":"SUCCEEDED",
+ "job":1,
+ "creation-date":1375913501078,
+ "external-link":"http:\/\/localhost:50030\/jobdetails.jsp?jobid=job_201307221513_0008",
+ "counters":{
+ "org.apache.hadoop.mapreduce.JobCounter":{
+ "SLOTS_MILLIS_MAPS":54905,
+ "FALLOW_SLOTS_MILLIS_REDUCES":0,
+ "FALLOW_SLOTS_MILLIS_MAPS":0,
+ "TOTAL_LAUNCHED_MAPS":2,
+ "SLOTS_MILLIS_REDUCES":0
+ },
+ "org.apache.hadoop.mapreduce.TaskCounter":{
+ "MAP_INPUT_RECORDS":0,
+ "PHYSICAL_MEMORY_BYTES":218865664,
+ "SPILLED_RECORDS":0,
+ "COMMITTED_HEAP_BYTES":112918528,
+ "CPU_MILLISECONDS":2550,
+ "VIRTUAL_MEMORY_BYTES":1955266560,
+ "SPLIT_RAW_BYTES":223,
+ "MAP_OUTPUT_RECORDS":5
+ },
+ "org.apache.hadoop.mapreduce.FileSystemCounter":{
+ "FILE_WRITE_OPS":0,
+ "FILE_READ_OPS":0,
+ "FILE_LARGE_READ_OPS":0,
+ "FILE_BYTES_READ":0,
+ "HDFS_BYTES_READ":223,
+ "FILE_BYTES_WRITTEN":387362,
+ "HDFS_LARGE_READ_OPS":0,
+ "HDFS_WRITE_OPS":2,
+ "HDFS_READ_OPS":2,
+ "HDFS_BYTES_WRITTEN":72
+ },
+ "org.apache.sqoop.submission.counter.SqoopCounters":{
+ "ROWS_READ":5
+ }
+ }
+ }
+ ]
+ }
+
+/v1/submission/action/[jid] - [GET]- Get The Latest Submission Of A Given Job
+---------------------------------------------------------------------------------
+
+Retrieve the latest submission of a given job, such as the status, counters and links for those submissions.
+
+This function is similar to ``/v1/submission/history/[jid]`` except that it always return one submission object.
+
+* Method: ``GET``
+* Format: ``JSON``
+* Request Content: ``None``
+* Fields of Response:
+
+The same as ``/v1/submission/history/[jid]``
+
+* Response Example:
+
+The same as ``/v1/submission/history/[jid]``
+
+/v1/submission/action/[jid] - [POST]- Submit Job
+---------------------------------------------------------------------------------
+
+Submit a job with id ``[jid]`` to make it run.
+
+* Method: ``POST``
+* Format: ``JSON``
+* Request Content: ``None``
+* Response Content: ``None``
+
+/v1/submission/action/[jid] - [DELETE]- Stop Job
+---------------------------------------------------------------------------------
+
+Stop a job with id ``[jid]``.
+
+* Method: ``DELETE``
+* Format: ``JSON``
+* Request Content: ``None``
+* Response Content: ``None``
http://git-wip-us.apache.org/repos/asf/sqoop/blob/7f2712b7/docs/src/site/sphinx/index.rst
----------------------------------------------------------------------
diff --git a/docs/src/site/sphinx/index.rst b/docs/src/site/sphinx/index.rst
index 6b03e62..07e3c47 100644
--- a/docs/src/site/sphinx/index.rst
+++ b/docs/src/site/sphinx/index.rst
@@ -62,3 +62,4 @@ Developer Guide
- `Development Environment Setup <DevEnv.html>`_
- `Java Client API Guide <ClientAPI.html>`_
- `Developping Connector <ConnectorDevelopment.html>`_
+- `REST API Guide <RESTAPI.html>`_
\ No newline at end of file