无码国模产在线观看免费-无码国内精品久久人妻-无码国内精品久久综合88-无码国内精品人妻少妇-无码国内精品人妻少妇蜜桃视频-无码国语中文在线播放

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

SAP 發布HTTP接口的Restful ( 含Token 驗證)


2024年11月20日 16:42 本文熱度 1404

SAP 如何提供 Http Service

如果要將 SAP 應用程序服務器 (application server)作為 http 服務提供者,需要定義一個類,這個類必須實現 IF_HTTP_EXTENSION 接口。IF_HTTP_EXTENSION 接口只有一個方法 HANDLE_REQUEST。自定義的這個類必須實現 HANDLE_REQUEST 方法。HANDLE_REQUEST 方法的 SERVER 參數是一個 http server 對象 (類型為 ICF 框架的 IF_HTTP_SERVER 接口)。http server 對象具有的屬性和方法對請求和響應進行處理。 然后使用 SICF 事務碼創建服務,并且將處理器(handler)設定為自定義類。 客戶端就可以訪問這個服務。

REST

而是Resource Representational State Transfer的縮寫:通俗來講就是:資源在網絡中以某種表現形式進行狀態轉移。分開來講:

1.Resource:資源,即數據(網絡的核心)。

2.Representational:某種表現形式,比如用JSON,XML,JPEG等;

3.State Transfer:狀態變化。通過HTTP動詞實現。

REST描述的是在網絡中client和server的一種交互形式;REST本身不實用,實用的是如何設計 RESTful API(REST風格的網絡接口;

Server提供的RESTful API中,URL中只使用名詞來指定資源,原則上不使用動詞。“資源”是REST架構或者說整個網絡處理的核心。

用HTTP協議里的動詞來實現資源的添加,修改。

Server和Client之間傳遞某資源的一個表現形式,比如用JSON,XML傳輸文本,或者用JPG,WebP傳輸圖片等。

用 HTTP Status Code傳遞Server的狀態信息。比如最常用的 200 表示成功,500 表示Server內部錯誤等。

Web端不再用之前典型的PHP或JSP架構,而是改為前段渲染和附帶處理簡單的商務邏輯。Web端和Server只使用上述定義的API來傳遞數據和改變數據狀態。格式一般是JSON。

對于資源的具體操作類型,由HTTP動詞表示。常用的HTTP動詞有下面五個(括號里是對應的SQL命令): 1.GET(SELECT): 從服務器獲取資源(一項或多項) 2.POST(CREATE): 在服務器新建一個資源 3.PUT(UPDATE): 在服務器更新資源(客戶端提供改變后的完整資源) 4.PATCHUPDATE): 在服務器更新資源(客戶端提供改變的屬性) 5.DELETEDELETE):從服務器刪除資源。
比如: GET /zoos:列出所有動物園 POST /zoos:新建一個動物園 GET /zoos/ID:獲取某個指定動物園的信息 PUT /zoos/ID:更新某個指定動物園的信息(提供該動物園的全部信息 PATCH /zoos/ID:更新某個指定動物園的信息(提供該動物園的部分信息) DELETE /zoos/ID:刪除某個動物園 GET /zoos/ID/animals:列出某個指定動物園的所有動物 DELETE /zoos/ID/animals/ID:刪除某個指定動物園的指定動物

SAP 發布HTTP接口(RESTful方式)

一、代碼過程

使用SE24創建一個類 ZLOCAL_CL_REST,并且繼承超類 CL_REST_HTTP_HANDLER 。

重構方法 IF_REST_APPLICATION~GET_ROOT_HANDLERHANDLE_CSRF_TOKEN,其中HANDLE_CSRF_TOKEN 是用于token驗證的,如果不需要token驗證則直接重構即可,不需要代碼,需要驗證的話可以保留,無需重構。

重構的代碼,其中/GET/PO 為接口路徑,ZLOCAL_CL_GET_PURCHASEORDER 為接口類

  • TOKEN 驗證 如果需要進行驗證的,則不需要重構方法HANDLE_CSRF_TOKEN,在原有的代碼邏輯下,使用GET 方法時,在發送請求時登入了 Authentication賬號密碼即可正確獲取token。不需要token則直接重構即可,不需要代碼。

  • 上述完成后,再次使用SE24 創建一個類,類名為前面的接口類 ZLOCAL_CL_GET_PURCHASEORDER.并且繼承超類 CL_REST_RESOURCE

繼承后,根據接口的不同調用方式,重構相應的方法

這里使用GET方式進行演示

  METHOD if_rest_resource~get.*CALL METHOD SUPER->IF_REST_RESOURCE~GET*    .    DATA: lv_output_json TYPE string.    DATA: lv_ebeln TYPE ebeln.    DATA: BEGIN OF ls_out,            ebeln TYPE ebeln,            bukrs TYPE bukrs,            bsart TYPE bsart,            aedat TYPE aedat,            ernam TYPE ernam,            lifnr TYPE lifnr,            ekorg TYPE ekorg,          END OF ls_out.    DATA: BEGIN OF ls_output,            code    TYPE char3,            clnt    TYPE sy-mandt,            status  TYPE char10,            content TYPE string,            data    LIKE ls_out,          END OF ls_output.          DATA(rt_parameters) =  mo_request->get_uri_query_parameters( )." 獲取參數 "          LOOP AT rt_parameters ASSIGNING FIELD-SYMBOL(<fs_par>).      TRANSLATE <fs_par>-name TO UPPER CASE.      TRANSLATE <fs_par>-value TO UPPER CASE.    ENDLOOP.    ls_output-clnt = sy-mandt.    READ TABLE rt_parameters INTO DATA(ls_par) WITH KEY name = 'EBELN'.    IF sy-subrc IS INITIAL AND ls_par-value IS NOT INITIAL.      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'        EXPORTING          input  = ls_par-value        IMPORTING          output = lv_ebeln.      SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_out FROM ekko        WHERE ebeln = lv_ebeln.      IF sy-subrc IS INITIAL.        ls_output-data = ls_out.        ls_output-code = cl_rest_status_code=>gc_success_ok.        ls_output-status = 'success'.        ls_output-content = '獲取成功'.      ELSE.        ls_output-data = ls_out.        ls_output-code = cl_rest_status_code=>gc_success_ok.        ls_output-status = 'fail'.        ls_output-content = '獲取失敗'.      ENDIF.    ELSE.      ls_output-data = ls_out.      ls_output-code = cl_rest_status_code=>gc_redirection_permanent.      ls_output-status = 'fail'.      ls_output-content = '參數錯誤'.    ENDIF.
   /ui2/cl_json=>serialize(   EXPORTING     data          = ls_output     compress      = abap_false     pretty_name   = /ui2/cl_json=>pretty_mode-camel_case   RECEIVING     r_json        = lv_output_json ).    " 響應內容"    mo_response->create_entity( )->set_string_data( lv_output_json ).    " 響應內容類型 : application/json"    mo_response->create_entity( )->set_content_type( iv_media_type = if_rest_media_type=>gc_appl_json ).    " 響應狀態 : 非必須"    mo_response->set_status( cl_rest_status_code=>gc_success_ok ).    " 響應說明  : 非必須"    mo_response->set_reason( cl_rest_status_code=>get_reason_phrase( cl_rest_status_code=>gc_success_ok ) ).  ENDMETHOD.

POST方式獲取body.

" POST 方式傳入參數,JSON"    DATA(lv_input_json) = io_entity->get_string_data( ).

二、使用SICF配置服務

配置如下,處理器為 ZLOCAL_CL_REST ,即第一次創建的類。

三、Postman 測試

1、正確調用

如果路徑不正確會提示沒有合適的資源。

方法沒啟用,提示不受支持。

使用token

  1. 使用token 需要在 POST 方式調用,先對類ZLOCAL_CL_GET_PURCHASEORDER中的方法IF_REST_RESOURCE~POST 重構,為了測試這里簡單重構了。

METHOD if_rest_resource~post.  TYPES:BEGIN OF ts_indata,          matnr TYPE matnr,          maktx TYPE maktx,        END OF ts_indata.  DATA: ls_data TYPE  ts_indata.  TYPES: BEGIN  OF ts_outdata,           code TYPE char3.      INCLUDE TYPE ts_indata.  TYPES:        END OF ts_outdata.  DATA: ls_outdata TYPE ts_outdata.  " POST 方式傳入參數,JSON"  DATA(lv_input_json) = io_entity->get_string_data( ).
 " JSON 轉換為內表"  /ui2/cl_json=>deserialize(    EXPORTING      json = lv_input_json    CHANGING        data = ls_data ).
 CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'    EXPORTING      input        = ls_data-matnr    IMPORTING      output       = ls_data-matnr    EXCEPTIONS      length_error = 1      OTHERS       = 2.
 SELECT SINGLE maktx FROM makt INTO ls_data-maktx WHERE matnr = ls_data-matnr.
 " 內表轉換JSON"  DATA: lv_output_json TYPE string.
 MOVE-CORRESPONDING ls_data TO ls_outdata.
 ls_outdata-code = cl_rest_status_code=>gc_success_ok .
 /ui2/cl_json=>serialize(     EXPORTING       data          = ls_outdata       compress      = abap_false       pretty_name   = /ui2/cl_json=>pretty_mode-camel_case     RECEIVING       r_json        = lv_output_json ).
 " 響應內容"  mo_response->create_entity( )->set_string_data( lv_output_json ).  " 響應狀態 : 非必須"  mo_response->set_status( cl_rest_status_code=>gc_success_ok ).  " 響應說明  : 非必須"  mo_response->set_reason( cl_rest_status_code=>get_reason_phrase( cl_rest_status_code=>gc_success_ok ) ).ENDMETHOD.

  • 對請求添加Basic Authentication賬號密碼,否則無法獲取。

  • 使用Postman 獲取token
    請求的Headers 中添加 x-csrf-token 參數,值為 fetch,即可在響應的 Headers 中取得 token 值。


測試token
1、使用錯誤的token會提示驗證失敗

正確的token,驗證時同樣需要Basic Authentication賬號密碼。(你也可以在sicf里面維護固定賬號密碼不推薦)


該文章在 2024/11/20 18:52:34 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 成人日动漫卡一区二区三区动漫 | 国产在线不卡一区二区三区 | 国产精品国产成人三级 | 国产精品va在线观看视色 | 久久精品AV无码一区二区小说 | av免费一区二区三区 | 精品国产一区二区三区免费看 | 久久久久久久久国产 | 97在线观看视频 | 欧美亚洲日本国产 | 亚洲高清国产拍精品26u | 2024国产成人福利精品视频 | 中文人妻无码一区二区三区 | 国产毛A片久久久久无码 | 美女内射毛片在线看免费人动物 | 日韩精品人妻系列无码专区免费 | 国产精品免费av片在线观 | 国产欧美一级二级精品日韩 | 午夜精品一区二区毛片 | 人妻久久久精品系列A片 | 婷婷成人丁香五月综合激情 | a级毛片高清免费视频在线播 | 亚洲欧美偷拍另类a∨色 | 欧美精品一区二 | 狼色精品人妻在线视频网站 | 日韩亚洲国产综合高清 | 亚洲欧美另类一区二区精品 | 日日夜夜免费精品天天www | 欧美国产中文在线字幕视频 | 久久综合久久美利坚合众国 | 成人做爰A片免费看视频 | 狠狠躁天天躁小说 | 四虎精品国产av二区 | 日日摸夜夜添夜夜添久久 | av天堂午夜精品一区二区三区 | 国产成人综合亚洲欧洲色就色 | 一本久道热线在线 视频 | 人妻夜夜爽天天爽三区麻豆av | 97在线国内在线永久播放 | 亚洲欧美另类都市激情一区 | 91污在线观看一区二区三区电影千金奴隶黄色鉴黄 |