<% set_title(product_name, "REST API Overview") %>

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

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.

You can write REST-enabled client applications for <%=vars.product_name%> in a variety of languages that use the open
and standard HTTP protocol&mdash;for example, Ruby, Python, JavaScript and Scala&mdash;as well as
already supported languages such as Java.

When you access <%=vars.product_name%> through the REST interface, objects are stored in <%=vars.product_name%> as PdxInstances. A PdxInstance is a light-weight wrapper around PDX serialized bytes. It provides applications with run-time access to fields of a PDX serialized object. This interoperable format allows your Java applications to operate on the same data as your REST applications.

As an added benefit, because <%=vars.product_name%>'s REST interface stores objects as PdxInstances, you do not need
to write corresponding Java classes to translate JSON data (which you must do with other REST
interface providers such as Oracle Coherence). For example, consider the use case where a non-Java
REST client application (Python, Ruby or Scala) performs <%=vars.product_name%> region operations with JSON data that
represents employee data. Since the object is stored in <%=vars.product_name%> as a PdxInstance that can be
automatically mapped to JSON, the user does not need to write a corresponding Employee.java class
and also does not need to worry about related issues such as keeping the Employee object in the
CLASSPATH.

See [<%=vars.product_name%> PDX Serialization](../developing/data_serialization/gemfire_pdx_serialization.html#gemfire_pdx_serialization) for more information on PDX serialization.


