Applies to ReadyAPI 2.1, last modified on August 1, 2017

The REST schema inference is a way to create a schema for a service when it is not provided in the service definition or is outdated. This topic describes how you can infer a schema for a web service.

Sample Request

To see how ReadyAPI uses schemas, we use a demo response from the Flickr REST example service. Here is the sample URL:

The API key often changes, so you may need to go to the Flickr REST demo website to get an up-to-date API key. Open the demo response and copy the api_key node from it. Then, replace the api_key parameter in the URL with the new one.
API key

If the request is successful, it returns the following response:

<rsp stat="ok">
    <method>flickr.test.echo</method>
    <format>rest</format>
    <foo>bar</foo>
    <api_key>494d8532e89c78ae151f23cbacfbf338</api_key>
</rsp>

1. Create the Project and Service

First, create a project with the rest service in it:

  1. Select File > New > Functional Test.

    New Functional Test
  2. Click Start under the URL option.

    Choosing URL

    Click the image to enlarge it.

  3. Insert the following URL:

    https://www.flickr.com/services/rest/?method=flickr.test.echo&format=rest&foo=bar&api_key=494d8532e89c78ae151f23cbacfbf338
    The API key often changes, so you may need to go to the Flickr REST demo website to get an up-to-date API key. Open the demo response and copy the api_key node from it. Then, replace the api_key parameter in the URL with the new one.

    Click Next.

    Entering the URL

    Click the image to enlarge it.

  4. ReadyAPI will offer you to run the test, or create a data-driven test. You do not need either option. Close the dialog.

ReadyAPI creates the project with the Flickr API. You can find it in the Navigator.

The new project

2. Open Schema Panel

The request is now available in ReadyAPI.

  1. Expand all project items to find the request.

    Request
  2. Double-click the request.

    ReadyAPI displays the request URL and shows the parameters in the Request section.

    The request section

    Click the image to enlarge it.

  3. The request has all the parameters defined in the URL. You have not sent the request yet, so the Response section is empty.

    Blank response

    Click the image to enlarge it.

  4. The Response section has the Schema panel at the bottom.

    The Schema Panel

    Click the image to enlarge it.

    The panel is empty, because there is no response to get data from.

    Note: Usually, you would automate the resolving of schema conflicts. In this tutorial, we will do this manually.

3. Create a Schema

To create a schema manually:

  • Remove the selection from the Auto-Resolve check box.

    Clear Auto-Resolve
  • Click to get the response from the server. The response appears in the Response section:

    The Response section

    Click the image to enlarge it.

  • The Schema panel shows the detected schema conflicts:

    Conflicts

    The analysis of the response shows that there are conflicts between the current response and the previously inferred schema. In this case, this is typical, because no prior schema exists.

  • Click Resolve Conflicts in the Schema panel to resolve the conflicts manually.

    Clicking Resolve conflicts
  • For each detected conflict, you will get a notification and can take necessary actions.

    Conflict warning
  • We can resolve all conflicts at once, because there is no previous schema. Click Yes to all.

  • ReadyAPI resolves all conflicts and adds them to the Schema panel.

    Resolved conflicts

    Click the image to enlarge it.

After ReadyAPI resolves all conflicts, it adds the schema to the Schemas tab:

The Schemas tab

Click the image to enlarge it.

There is one namespace and the associated XSD schema for it. This schema is based on and can be improved by sending more requests with different parameters. For example, we can issue an invalid request to infer the schema for a fault or make a request for a query that returns an empty result set, and so on.

4. Add More Requests to Schema

To add more definitions to the schema, send a different request. Since we can assume the responses will be valid, you can use the Auto-Resolve option.

  • Open the Conflicts tab and select the Auto-Resolve option.

    Auto-Resolve selected
  • To get a different response, remove the api_key parameter value from the request:

    Removing the api_key

    Click the image to enlarge it.

  • Click .

  • The response will contain an error:

    Response error

    Click the image to enlarge it.

  • ReadyAPI resolves and logs errors automatically:

    Automatically resolved conflicts

    Click the image to enlarge it.

  • When all conflicts are resolved, the new response will appear in the schema:

    New schema

    Here is the comparison between the resources:

    Before After
    Resource before resolving

    Click the image to enlarge it.

    Resource after resolving

    Click the image to enlarge it.

    You can keep modifying the request to get more different responses and create a more complex schema.

5. Use the Schema

The main purpose of inferred schemas is to verify that the service response contains no unexpected elements. Use the Schema Compliance assertion for this:

  • Expand the Assertions panel and click .

    Adding Schema Compliance assertions

    Click the image to enlarge it.

  • Select Compliance, Status and Standards > Schema Compliance and click Add.

ReadyAPI will add the assertion and automatically verify the incoming responses.

Tip: The schema is also displayed in the WADL Content tab of the project editor. Click if the schema is not displayed to reload the definition.

See Also

Verifying APIs
SOAP WS-I Compliance