<% set_title("Developing REST Applications for", product_name_long) %>

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

*Developing REST Applications for <%=vars.product_name_long%>* provides background and instructions on how to program REST applications with <%=vars.product_name_long%>. <%=vars.product_name%> REST APIs allow you to access region data, queries and functions in your <%=vars.product_name%> deployment in wide variety of programming languages.

**Note:**
This documentation covers the **v1** release of <%=vars.product_name%> REST APIs for developing applications.

-   **[<%=vars.product_name%> REST API Overview](chapter_overview.html)**

    By using the <%=vars.product_name%> REST application interface, you can immediately access <%=vars.product_name%>'s data management capabilities in languages other than the natively supported Java language.

-   **[Prerequisites and Limitations for Writing REST Applications](rest_prereqs.html)**

    Before development, understand the prerequisites and limitations of the current REST implementation in <%=vars.product_name%>.

-   **[Setup and Configuration](setup_config.html)**

    The <%=vars.product_name_long%> developer REST interface runs as an embedded HTTP or HTTPS service (Jetty server) within a <%=vars.product_name%> data node.

-   **[Using the Swagger UI to Browse REST APIs](using_swagger.html)**

    <%=vars.product_name_long%> Developer REST APIs are integrated with the Swagger™ framework. This framework provides a browser-based test client that allows you to visualize and try out <%=vars.product_name%> REST APIs.

-   **[Developing REST Applications](develop_rest_apps.html)**

    This section provides guidelines on writing REST client applications for <%=vars.product_name%>.

-   **[Sample REST Applications](rest_examples.html)**

    This section provides examples that illustrate how multiple clients, both REST and native, can access the same <%=vars.product_name%> region data.

-   **[Troubleshooting and FAQ](troubleshooting.html)**

    This section provides troubleshooting guidance and frequently asked questions about <%=vars.product_name%> Developer REST APIs.

-   **[<%=vars.product_name_long%> REST API Reference](rest_api_reference.html)**

    This section summarizes all available <%=vars.product_name_long%> REST API resources and endpoints.


