// 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.
= REST API

The Ignite 3 clusters provide an link:https://www.openapis.org/[OpenAPI] specification that can be used to work with Ignite 3 by standard REST methods.

== REST Connector Configuration

By default, rest connector starts on port 10300. THis port can be configured in the `ignite.rest` link:administrators-guide/config/node-config#rest-configuration[node configuration].

== Using HTTP Tools

Once the cluster is started, you can use external tools to monitor the cluster over http, or manage the cluster. In this example, we will use link:https://curl.se/[curl] to get cluster status:

[source, bash]
----
curl 'http://localhost:10300/management/v1/cluster/state'
----

You are not limited to only monitoring, as Ignite REST API provides endpoints that can be used to manage the cluster as well. For example, you can create a link:administrators-guide/snapshots/snapshots-and-recovery[snapshot] via REST:

[source, bash]
----
curl -H "Content-Type: application/json" -d '{"snapshotType": "FULL","tableNames": "table1,table2","startTimeEpochMilli": 0}' http://localhost:10300/management/v1/snapshot/create
----

== Java Project Configuration

If you want to integrate Ignite REST API closer into your application, we recommend using an link:https://github.com/OpenAPITools/openapi-generator[OpenAPI generator] to generate a Java client. Once the client is generated, you can use it to work with REST API from code, for example:

[source,java]
----
ApiClient client = Configuration.getDefaultApiClient();
// Set base URL
client.setBasePath("http://localhost:10300");

// Get cluster configuration.
ClusterConfigurationApi clusterConfigurationApi = new ClusterConfigurationApi(client);
String configuration = clusterConfigurationApi.getClusterConfiguration();
----
