OData and SAP. Part X-Query Options & HTTP Status Code Summary

Explore OData query options & HTTP status codes to enhance your web application’s data retrieval and error handling, ensuring efficiency and robust performance.

In modern web applications, efficient data retrieval and manipulation are crucial. OData (Open Data Protocol) provides a standardized way to query and update data using RESTful APIs. Two essential aspects of working with OData Query Options services are understanding query options and HTTP status codes. This article delves into these concepts, providing an in-depth exploration of their roles, usage, and significance in building robust web applications.

HTTP MethodDescription
GETThe GET method is used for FETCHing information from the server using a URI. Requests using GET only retrieves data and would have no other effect on the data.
POSTA POST request is used for CREATing data in the server (SAP Backend).
PUTA PUT request is used for UPDATing data in the server (SAP Backend).
DELETEA DELETE request is used for REMOVing data from the server (SAP Backend).

Query Options in OData

OData Query Options allow clients to customize their data queries, ensuring that they retrieve precisely what they need. These options enhance flexibility and efficiency by enabling clients to filter, sort, and shape the data returned by the service. Here are the key OData Query Options:

OData Query OptionsCoding RequiredWhat does it mean for ABAPers?
$selectNoField ProjectionSELECT <FLDL1> <FLD2> from <DBTAB>
$countNoSELECT COUNT(*) from <DBTAB>
$expandNoTables joinSELECT * FROM <DBTAB1> LEFT OUTER JOIN <DBTAB2> on <FIELD> = <DBTAB2>.<FIELD>
$formatNo
&sap-ds-debug=trueNoNavigating in the Service Document. This allows you to easily navigate in the document structure.
orderbyYesSORT <ITAB> by <Entity Property>
$topYesSELECT <FLD1> <FLD2> UPTO N rows from <DBTAB>
$skipYes
$filterYesWhere clauseSELECT <FLD1> <FLD2> from <DBTAB> WHERE <FLD> = <VALUE>
$inlinecountYes 
$skiptokenYes 

1. $filter

The $filter option allows clients to specify conditions that the data must meet to be included in the response. This is similar to the WHERE clause in SQL. It supports various operators, such as eq (equals), ne (not equal), gt (greater than), lt (less than), ge (greater than or equal to), le (less than or equal to), and logical operators like and and or.

Example:

perlCopy codeGET /Products?$filter=Price gt 20 and Category eq 'Electronics'
This query retrieves products with a price greater than 20 and belonging to the 'Electronics' category.

2. $select

The $select option allows clients to specify which properties of the data entities they want to retrieve. This helps reduce the amount of data transferred over the network, improving performance.

Example:

sqlCopy codeGET /Products?$select=Name,Price,Category 

This query retrieves only the Name, Price, and Category properties of the products.

3. $expand

The $expand option enables clients to retrieve related entities as part of the response. This is useful for fetching data from associated tables or collections.

Example:

bashCopy codeGET /Orders?$expand=Customer,OrderDetails 


This query retrieves orders along with the related Customer and OrderDetails entities.

4. $orderby

The $orderby option allows clients to sort the results based on specified properties. It supports ascending (asc) and descending (desc) sorting.

Example:

sqlCopy codeGET /Products?$orderby=Price desc
This query retrieves products sorted by price in descending order.

5. $top and $skip

The $top option limits the number of results returned, while the $skip option skips a specified number of results. These options are useful for implementing pagination.

Example:

bashCopy codeGET /Products?$top=10&$skip=20

This query retrieves the next 10 products, skipping the first 20.

6. $count

The $count option returns the total number of entities that match the query criteria, providing a count of the items in the collection.

Example:

bashCopy codeGET /Products?$count=true

This query retrieves the products and includes the total count of products in the response.

7. $format

The $format option specifies the format of the response, such as JSON or XML.

Example:

bashCopy codeGET /Products?$format=json 


This query retrieves products in JSON format.

HTTP Status Codes in OData

HTTP status codes indicate the outcome of an HTTP request. In OData, these codes provide crucial information about the success or failure of the request. Understanding these codes is essential for handling responses effectively.

1. 2xx Success

  • 200 OK: The request was successful, and the response contains the requested data. Example:sqlCopy codeGET /Products The server returns a 200 OK status with the list of products.
  • 201 Created: The request was successful, and a new resource was created.Example:Copy codePOST /Products The server returns a 201 Created status after successfully creating a new product.
  • 204 No Content: The request was successful, but there is no content to return. Example:scssCopy codeDELETE /Products(1) The server returns a 204 No Content status after successfully deleting the product with ID 1.

2. 3xx Redirection

  • 301 Moved Permanently: The requested resource has been moved to a new URL permanently.
  • 302 Found: The requested resource is temporarily available at a different URL.
  • 304 Not Modified: The resource has not been modified since the last request, so the client can use the cached version.

3. 4xx Client Errors

  • 400 Bad Request: The request is invalid or malformed. Example:perlCopy codeGET /Products?$filter=Price lt The server returns a 400 Bad Request status due to an incomplete filter expression.
  • 401 Unauthorized: The client must authenticate to access the requested resource. Example:sqlCopy codeGET /Products The server returns a 401 Unauthorized status if the client is not authenticated.
  • 403 Forbidden: The client does not have permission to access the requested resource. Example:scssCopy codeDELETE /Products(1) The server returns a 403 Forbidden status if the client is not authorized to delete the product.
  • 404 Not Found: The requested resource does not exist. Example:scssCopy codeGET /Products(999) The server returns a 404 Not Found status if the product with ID 999 does not exist.
  • 409 Conflict: The request could not be completed due to a conflict with the current state of the resource. Example: Copy codePOST /Products The server returns a 409 Conflict status if a product with the same ID already exists.

4. 5xx Server Errors

  • 500 Internal Server Error: The server encountered an unexpected condition that prevented it from fulfilling the request. Example:sqlCopy codeGET /Products The server returns a 500 Internal Server Error status if an unexpected error occurs while retrieving products.
  • 503 Service Unavailable: The server is currently unable to handle the request due to temporary overload or maintenance. Example:sqlCopy codeGET /Products The server returns a 503 Service Unavailable status if it is temporarily overloaded or undergoing maintenance.

Conclusion

OData Query Options and HTTP status codes play crucial roles in building efficient and robust web applications. Query options provide the flexibility to customize data retrieval, ensuring clients get exactly what they need while minimizing data transfer. HTTP status codes offer essential feedback on the outcome of requests, helping developers handle responses effectively and troubleshoot issues.

Understanding and utilizing these features can significantly enhance the functionality and performance of web applications, leading to better user experiences and more efficient data management. Whether filtering data, selecting specific fields, expanding related entities, or handling errors, mastering OData Query Options and HTTP status codes is a key step towards building modern, scalable web services.

You may be interested in this blog here:-

तुमच्या प्रीस्कूलरच्या कुतूहलाला कसे प्रोत्साहन द्यावे

Deloitte Careers for Freshers: Opportunities and Insights… 

How to Execute a Batch Class in Salesforce: A Step-by-Step

A Deep Dive into the SAP API Hub

Related Posts

SAP XI/PI – Invoice Attachment Transfer from ARIBA to VIM

The documents that are connected to the invoice in the Ariba Network system should be transferred to the VIM system via PI Integration as part of the Ariba Supplier Invoice…

Attachments for SAP XI/PI – ARIBA Invoices sent via PI to S/4HANA

Integration with SAP systems has never been more intriguing, especially with Ariba, Workday, Concur, Successfactors, Fieldglass, Hybris, and other satellite cloud solution vendors banging on doors every day. 🙂 I…

Leave a Reply

Your email address will not be published. Required fields are marked *

You Missed

SAP XI/PI – Invoice Attachment Transfer from ARIBA to VIM

  • By Varad
  • November 8, 2024
  • 3 views
SAP XI/PI – Invoice Attachment Transfer from ARIBA to VIM

11 Steps to Include a New Field in an Already-Existing SAP LSMW Batch Input Recording

  • By Varad
  • November 6, 2024
  • 3 views

Part 23 of ABAP for SAP HANA. How Can AMDP Be Used to Access Database Schema Dynamically?

  • By Varad
  • November 4, 2024
  • 3 views

S/4HANA VDM 1 Employing CDS Virtual Data Model for Embedded Analytics

  • By Varad
  • November 1, 2024
  • 5 views