반응형

 

ABAP에서 URL에 접근하여 데이터를 가져오는 가장 일반적인 방법은

 

HTTP Client Class를 사용하는 것이다.

 

CL_HTTP_CLIENT 클래스를 이용하여 HTTP요청을 보낼 수 있다.

 

DATA : lo_http_client TYPE REF TO if_http_client,
       lv_json        TYPE string,
       lv_api_token   TYPE string VALUE '접근가능한 API TKOEN명',  " API Token
       lv_auth        TYPE string,
       ls_data        TYPE gty_data.


DATA(lv_url) = |https://접근할 URL 주소|.
" HTTP 클라이언트 생성
cl_http_client=>create_by_url( EXPORTING url = lv_url
                               IMPORTING client = lo_http_client ).

" HTTP 요청 설정
lv_auth = |Bearer { lv_api_token }|.
lo_http_client->request->set_header_field( name = 'Authorization' value = lv_auth ).
lo_http_client->request->set_header_field( name = 'Content-Type' value = if_rest_media_type=>gc_appl_json ).
lo_http_client->request->set_method( if_http_request=>co_request_method_get ).

" HTTP 요청 전송
lo_http_client->send( ).

lo_http_client->receive( ).

" HTTP 상태 코드 확인.
lo_http_client->response->get_status( IMPORTING code = DATA(lv_status_code) ).

IF lv_status_code <> '200'.
  " 실패 Message 처리
  EXIT.
ELSE.

  " Body Data
  DATA(lv_response_body) = lo_http_client->response->get_cdata( ).

  " HTTP 클라이언트 종료
  lo_http_client->close( ).

  "  Json Data -> ABAP Stucture로 변환
  CALL METHOD /ui2/cl_json=>deserialize(
    EXPORTING
      json = lv_response_body
    CHANGING
      data = ls_data ).    " ABAP Structure Data

ENDIF.

 

코드를 다음과 같이 작성하면 URL에 접근이 가능하다.

 

CL_HTTP_CLIENT 클래스를 사용하요 HTTP 클라이언트를 생성하고,

 

Header 및 Method 구성 후 send 와 receive를 사용하여 요청하고 응답을 받을 수 있습니다.

 

만약 URL에 데이터를 전송하려면 Method구성 시 GET이 아니라 POST를 요청하면 된다.

 

IF_REST_MEDIA_TYPE 해당 인터페이스를 들어가보면 Attribute에 변수가 저장되어 있어서 

 

알맞은 attribute를 찾아서 header와 method를 구성하면 쉽게 접근할 수 있다.

 

IF_REST_MEDIA_TYPE 인터페이스에 설정되어 있는 atrribute

 

IF_HTTP_ENTITY의 attribute

 

위의 코드로 접근 시 해당 data를 받아오면 되는데 JSON type 으로 요청했기 때문에

 

JSON data를 ABAP Structure로 변환만 해주면 된다.

 

" Status, issue info
TYPES: BEGIN OF gty_name,
         name TYPE string,
       END OF gty_name.

" Field info
TYPES: BEGIN OF gty_fields,
         issuetype         TYPE gty_name,      
         status            TYPE gty_name,       
         resolutiondate    TYPE string,          
         created           TYPE string,           
       END OF gty_fields.

" JSON Data Info
TYPES : BEGIN OF gty_data,
          key    TYPE string,                  
          fields TYPE gty_fields,          
        END OF gty_data.

 

JSON 받을 data는 다음과 같이 deep structure로 구성하여 필요한 필드만 구성하여 받을 수 있다.

 

이렇게 구성되어 나온 JSON데이터를 가공하여

 

아래 그림과 같이 ABAP Structure로 변환 된 data를 사용할 수 있다.

 

반응형

'SAP > ABAP' 카테고리의 다른 글

[ABAP] BDC를 활용한 CALL TRANSACTION  (0) 2024.09.10
[ABAP] SMW0를 이용한 Excel 다운로드  (1) 2024.09.09
[ABAP] Subtotal(소계) 세팅  (1) 2024.09.02
[ABAP] SELECT WITH 구문  (0) 2024.06.24
[ABAP] Pass by Value vs Pass by Reference  (1) 2024.06.16

+ Recent posts