Testing RESTful Web Services
With RubyMine, you can test RESTful Web services. RubyMine provides facilities to emulate interaction with a WebService by composing and running requests, as if you were the application that actually calls the service. In addition to this, you can create, save, edit, and remove cookies, both received through responses and created manually. The name and value of a cookie is automatically included in each request to the URL address that matches the domain and path specified for the cookie, provided that the expiry date has not been reached.
There are two main use cases when you need to compose and run requests to a RESTful Web service:
- When you have developed and deployed a RESTful Web service and want to make sure it works as expected: that it is accessible in compliance with the specification and that it responds correctly.
- When you are developing an application that addresses a RESTful Web service. In this case it is helpful to investigate the access to the service and the required input data before you start the development. During the development, you may also call the Web service from outside your application. This may help locate errors when your application results in unexpected output while no logical errors are detected in your code and you suspect that the bottleneck is the interaction with the Web service.
Testing a RESTful Web service includes the following checks:
- That URL addresses are constituted correctly based on the service deployment end-point and the method annotations.
- That the generated server requests call the corresponding methods.
- That the methods return acceptable data.
Composing and submitting a test request to a Web service method
- If you are going to test your own Web service, make sure it is deployed and running.
- Choose REST Client dedicated tool window opens. . The
- To have RubyMine generate an authentication header which will be used in basic authentication, click the Generate Authorization Header button and in the dialog box that opens, specify your user name and password for accessing the target RESTful Web service through. Based on these credentials RubyMine will generate an authentication header which will be used in basic authentication. Learn more at http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm.
- Select the test request method from the HTTP method drop-down list. The available options are:
- Provide the data to calculate the URL address of the target method:
- In the Host/port text box, type the URL address of the host where the Web service is deployed.
- In the Path field, specify the relative path to the method to invoke.
You can enter the entire URL address of a method to test in the Host/port text box. Regardless of the chosen HTTP method, upon pressing RubyMine will split the URL address into the host/port and the path to the method. The extracted relative path will be shown in the Path text box and the extracted parameters will be added to the list in the Request Parameters pane of the Request tab.
- In the Header data pane, specify the technical data included in the request header. These data are passed through header fields and define the format of the input parameters (accept field), the response format (content-type field), the caching mechanism (cache-control field), etc.
To add a field to the list, click Add , then specify the field name in the Name text box and the field value in the Value drop-down list.
The set of fields and their values should comply with the Web service API. In other words, the specified input format should be exactly the one expected by the Web service as well as the expected response format should be exactly the one that the service returns.
content-type, and some other fields RubyMine provides a list of suggested values. Choose the relevant format type from the Value drop-down list.
- Create a set of parameters to be passed to the target method and specify their values. Depending on the chosen request method, you can create a list of parameters in two ways:
GETrequests, specify the parameters to be passed as a query string inside the URL. Use the Request Parameters pane. By default, the pane shows an empty list with one line.
- To add a parameter, click Add , then specify the name of the parameter in the Name text box and the value of the parameter in the Value drop-down list.
- To delete a parameter from the list, select it and click Remove .
- To suppress sending the specified query string parameters and disable the controls in the Request Parameters pane, press the Don't send anything toggle button .
- To have the parameters passed to the target method inside a request message body, use the Request Body pane or have them inserted in the request from a local file. The Request Body pane is disabled when the
OPTIONSrequest method is selected.
- To specify the parameters explicitly, choose the Text option and type the parameters and values in the text box.
- To have the parameters inserted from a text file, choose the File contents option and specify the file location in the File to send field.
- To have a binary file converted and sent in the request, choose the File upload(multipart/form-data) option and specify the file location in the File to send field.
- To submit a request to the server, click the Submit request button .
Note that the server may lack certificate, or be untrusted.
Viewing and analyzing responses from Web services
- To view the response to the server request, switch to the Response tab. The tab is opened automatically when a response is received. By default, the server response is shown in the format, specified in the request header through the content-type field.
- To have the response converted into another format and opened in a separate tab in the editor, use the View as HTML , View as XML , View as JSON buttons.
- To view the technical data provided in the header of a Web service response, switch to the Response Headers tab.
Working with cookies
Using the dedicated Cookies tab, you can create, save, edit, and remove cookies, both received through responses and created manually. The name and value of a cookie is automatically included in each request to the URL address that matches the domain and path specified for the cookie, provided that the expiry date has not been reached.
The tab shows a list of all currently available cookies that you received through responses or created manually. The cookies are shown in the order they were added to the list. When you click a cookie, its details become editable and are displayed in text boxes. See REST Client Tool Window for details.
- No specific steps are required to save a cookie received through a response, all the cookies received from servers are saved automatically. To edit a received cookie, click the row with the cookie in the list and update the details that are now shown in editable text boxes.
- To create a cookie manually, click and specify the following:
- The name and value of the cookie to be included in requests.
- The domain and path the requests to which must be supplied with the name, value, and expiry date of the cookie.
- To remove a cookie from the list, select the row with the cookie and click .
Configuring Proxy settings
- Click the Configure HTTP Proxy icon .
- In the Proxy dialog that opens, specify the following:
- Enter the Proxy host name and Proxy port number in the Proxy host and Proxy port text boxes respectively.
- To enable authorization, check the Use authorization checkbox and type the User name and password in the relevant fields.
During a RubyMine session, RubyMine keeps track or requests and you can run any previously executed request. You can also save the settings of a request in an XML file so they are available in another RubyMine session. When necessary, you can retrieve the saved settings and run the request again.
Rerunning a request within a RubyMine session
- Click the Replay Recent Requests button .
- From the Recent Requests pop-up list, select the relevant request. The fields are filled in with the settings of the selected request.
- Click the Submit Request button .
Saving the settings of a request so they can be retrieved in another RubyMine session
- Click the Export Request button . In the dialog box that opens, specify the name of the file to save the settings in and its parent folder.
Running a request saved during a previous RubyMine session
- Click the Import Request button .
- In the dialog box that opens, select the relevant XML file. The fields are filled in with the settings of the selected request.
- Click the Submit Request button .