We will be developing an API which will take CARRID as input in JSON payload and it will return relevant details from SFLIGHT table.
Goto TCode SICF → Below scree will appear

Execute → Navigate to default_host → sap → bc → Right click on bc → Click on New Sub-Element

Below popup will appear → Click OK

Enter the Service name → Click on OK

Provide values in below screen in Service Data Tab

Navigate to Logon Data Tab

Navigate to Handler List Tab → Enter the Service Handler Class name (ZCL_HTTPHANDLER)

Click on Save → Below message will appear → as we have not created the handler class yet.

Goto TCode SE24 to create the Class: ZCL_HTTPHANDLER



Navigate to Interface Tab → Enter Interface name: IF_HTTP_EXTENSION

Navigate to Attributes Tab → Add Attribute _HTTP_SERVER

Navigate to Method Tab → Method: IF_HTTP_EXTENSION~HANDLE_REQUEST will appear → Double click on Method name → Save → Activate.
Now move back to TCode SICF and Save the service → Now it will allow to save as Class is created and activated.
Also, we need to activate the Service → Right click on Service → Activate → Save

We have to write codes inside Method: IF_HTTP_EXTENSION~HANDLE_REQUEST to read the payload and return the response.

Code reference:
METHOD if_http_extension~handle_request.
TYPES : BEGIN OF ty_in_data,
carrid TYPE s_carr_id,
END OF ty_in_data,
BEGIN OF ty_error,
type TYPE char1,
message TYPE char50,
END OF ty_error.
DATA : _request_data TYPE string,
respons_data_ TYPE string,
_s_jsoninput TYPE ty_in_data,
_t_error TYPE STANDARD TABLE OF ty_error,
o_response_ TYPE REF TO if_http_response,
_o_exception TYPE REF TO cx_root.
FIELD-SYMBOLS : <fs_outtab> TYPE ANY TABLE.
_http_server = server.
TRY.
* Parse the Payload in SAP Structure/Table
_request_data = server->request->get_cdata( ).
CALL METHOD /ui2/cl_json=>deserialize
EXPORTING
json = _request_data
pretty_name = /ui2/cl_json=>pretty_mode-camel_case
CHANGING
data = _s_jsoninput.
IF _s_jsoninput IS NOT INITIAL.
* Data Extraction
SELECT * FROM sflight INTO TABLE @DATA(_t_sflight)
WHERE carrid EQ @_s_jsoninput-carrid.
ASSIGN _t_sflight TO <fs_outtab>.
IF sy-subrc IS NOT INITIAL.
* Populate Error Table - for No data found
_t_error = VALUE #( BASE _t_error ( type = 'E' message = 'No data found' ) ).
ASSIGN _t_error TO <fs_outtab>.
ENDIF.
ELSE.
* Populate Error Table - Empty Payload
_t_error = VALUE #( BASE _t_error ( type = 'E' message = 'Empty Payload' ) ).
ASSIGN _t_error TO <fs_outtab>.
ENDIF.
* Output table to Json
IF <fs_outtab> IS ASSIGNED.
respons_data_ = /ui2/cl_json=>serialize(
data = <fs_outtab>
compress = abap_false
pretty_name = /ui2/cl_json=>pretty_mode-camel_case ).
o_response_ = _http_server->response.
o_response_->set_status( code = '200' reason = 'OK' ).
o_response_->set_content_type( 'application/json' ).
o_response_->set_cdata( respons_data_ ).
ELSE.
o_response_->set_status( code = '500' reason = 'Internal Server Error' ).
ENDIF.
CATCH cx_root INTO _o_exception.
_http_server->response->set_status( code = 500 reason = 'Internal Server Error' ).
ENDTRY.
ENDMETHOD.
Save and activate the Method/Class
It can be tested through Postman. Check this blog for API testing through Postman.
If you are not sure for the URL, check with your Basis Team

If Sflight Table is empty then Execute Program: SAPBC_DATA_GENERATOR to generate data.
For Empty Payload:

this is old approach….we can use SAP Odata services to built APIS
LikeLike