<!--
  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.
-->

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
    <meta http-equiv="Expires" content="-1">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Cache-Control" content="no-cache">
    <meta http-equiv="Content-language" content="en-US">
    <meta http-equiv="Content-Type" content="text/html; CHARSET=UTF-8">
    <meta http-equiv="Author" content="Apache Software Foundation">
    <title>Apache Ignite - In-Memory Database and Caching Platform</title>
    <style type="text/css">
        body {
            font-family: helvetica, verdana, arial, sans-serif;
            font-size: 14px;
            line-height: 1.5em;
            color: #333;
            margin: 10px;
        }
        a, a:visited, a:active, a:hover {
            color: #333;
            text-decoration: none;
            border-bottom: 1px dotted;
        }

        a.img_link, a.img_link:visited, a.img_link:active, a.img_link:hover {
            text-decoration: none;
            border-bottom: 0;
        }

        img {
            border: none;
        }
    </style>
    <link rel="icon" type="image/x-icon" href="/favicon.ico"/>
</head>
<body>
    <br>
    <br>
    <center>
        <a class="img_link" href="https://ignite.apache.org" title="Apache Software Foundation">
            <img src="http://ignite.apache.org/images/logo3.png" alt="Ignite - In-Memory Database and Caching Platform">
        </a>
        <p>
        <div style="width: 650px; text-align: justify; padding-top: 20px">
            <h2>REST API</h2>
            Ignite REST API supports
            external connectivity to Ignite via REST over HTTP. It comes in handy whenever Ignite Java API is not
            available directly, but it is still needed to execute Ignite tasks or retrieve cached data. For example,
            you can conveniently use Ignite REST API over HTTP from other non-JVM languages, such as Ruby, PHP or Python,
            or any other language, whenever local instance of Ignite is not available.
            <p>
            Note that PHP REST example is included with Ignite distribution.
            <p>
            All REST HTTP commands have the following format: <code>http://1.2.3.4:8080/ignite?cmd=CMD&amp;...</code>, where
            <code>'cmd'</code> is the name of the command followed by other command parameters. Every command may have
            different parameters, some of which may be mandatory and some optional. The commands parameters may be
            passed either via HTTP GET or POST, whichever one is preferred.
        </div>
    </center>
</body>
</html>
