SAP REST API Aufruf Problem / SSL-Zertifikat Überprüfung

Getting started ... Alles für einen gelungenen Start.
11 Beiträge • Seite 1 von 1
11 Beiträge Seite 1 von 1

SAP REST API Aufruf Problem / SSL-Zertifikat Überprüfung

Beitrag von sap_koun (ForumUser / 29 / 24 / 0 ) »
Hallo liebe SAPler,

ich versuche ein Programm zu schreiben, dass Informationen von einer REST API im Internet abruft. Habt ihr ein gutes Tutorial, dass das irgendwie verständlich erklärt?
Ich möchte einen einfachen GET Aufruf starten und habe dafür einen Developerkey mit "key" und "value". Wo füge ich das sein?

Nach dem Einspielen des SSL-Zertifikats wollte ich einen ersten Testaufruf starten.

Folgende Fehlermeldung kam zurück. Weiß nicht was ich tun soll.
Laufzeitfehler: MESSAGE_TYPE_UNKOWN
Fehleranalyse: Es sind nur die Message-Typen A, E, I, W, S und X erlaubt.

Zeile 37
Modulname: START-OF-SELECTION

Code: Alles auswählen.


*&---------------------------------------------------------------------*
*& Report  Z_API_AUFRUF_TEST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  Z_API_AUFRUF_TEST.

DATA: lv_code          TYPE i,
      lv_url           TYPE string,
      li_client        TYPE REF TO if_http_client,
      lt_errors        TYPE TABLE OF string,
      lv_error_message TYPE string,
      lv_json_data     TYPE string.


lv_url = '>URL<'.

cl_http_client=>create_by_url(
  EXPORTING
    url           = lv_url
    ssl_id        = 'ANONYM'
  IMPORTING
    client        = li_client ).

li_client->send( ).
li_client->receive(
  EXCEPTIONS
    http_communication_failure = 1
    http_invalid_state         = 2
    http_processing_failed     = 3
    OTHERS                     = 4 ).
IF sy-subrc <> 0.
  WRITE: / 'Error Number', sy-subrc, /.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  li_client->get_last_error(
    IMPORTING
      message = lv_error_message ).
  SPLIT lv_error_message AT cl_abap_char_utilities=>newline INTO TABLE lt_errors.
  LOOP AT lt_errors INTO lv_error_message.
    WRITE: / lv_error_message.
  ENDLOOP.
  RETURN.
ENDIF.

li_client->response->get_status(
  IMPORTING
    code = lv_code ).
IF lv_code = 200.
  WRITE: / lv_url, ': OK'.
  WRITE: /.

  lv_json_data = li_client->response->get_cdata( ).
  WRITE lv_json_data.
ENDIF.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: SAP REST API Aufruf Problem / SSL-Zertifikat Überprüfung

Beitrag von Wann (ForumUser / 57 / 3 / 15 ) »
Du bekommst einen sy-subrc <> 0 und sy-msgty, sy-msgno etc. sind nicht gefüllt.

Folgende Benutzer bedankten sich beim Autor Wann für den Beitrag:
sap_koun


Re: SAP REST API Aufruf Problem / SSL-Zertifikat Überprüfung

Beitrag von jocoder (Specialist / 339 / 3 / 101 ) »
Was sagt denn die API-Doku, an welcher Stelle der Developerkey einzufügen ist (HTTP-Authorization-Header oder ähnliches)?

Folgende Benutzer bedankten sich beim Autor jocoder für den Beitrag:
sap_koun


Re: SAP REST API Aufruf Problem / SSL-Zertifikat Überprüfung

Beitrag von IHe (Specialist / 142 / 35 / 45 ) »
Den Laufzeitfehler erhältst du, weil SY-MSGTY initial ist - der vorherige Aufruf setzt nur den sy-subrc, aber keine Meldung. Wenn du den MESSAGE-Befehl auskommentiertst, erhältst du denn dann eine lv_error_message?
Ansonsten kannst du auch den Status überprüfen:

Code: Alles auswählen.

li_client->response->get_status( IMPORTING code = lv_http_rc
                                         reason = lv_reason ).
Eventuell musst du vor dem send() auch noch Header-Daten füllen wie z.B.:

Code: Alles auswählen.

li_client->request->set_header_field(
                       name  = '~request_method'           
                       value = 'GET' ).
li_client->request->set_header_field(
                       name  = '~server_protocol'           
                       value = 'HTTP/1.1' ).
Es kann auch hilfreich sein den API-Aufruf parallel mit einem Tool wie z.B. Postman zu testen.

Folgende Benutzer bedankten sich beim Autor IHe für den Beitrag:
sap_koun

Ingo Hoffmann

ECC|S/4HANA|BTP
dbh SAP Solutions

Re: SAP REST API Aufruf Problem / SSL-Zertifikat Überprüfung

Beitrag von sap_koun (ForumUser / 29 / 24 / 0 ) »
IHe hat geschrieben:
18.08.2021 10:20
Den Laufzeitfehler erhältst du, weil SY-MSGTY initial ist - der vorherige Aufruf setzt nur den sy-subrc, aber keine Meldung. Wenn du den MESSAGE-Befehl auskommentiertst, erhältst du denn dann eine lv_error_message?
Ansonsten kannst du auch den Status überprüfen:

Code: Alles auswählen.

li_client->response->get_status( IMPORTING code = lv_http_rc
                                         reason = lv_reason ).
Eventuell musst du vor dem send() auch noch Header-Daten füllen wie z.B.:

Code: Alles auswählen.

li_client->request->set_header_field(
                       name  = '~request_method'           
                       value = 'GET' ).
li_client->request->set_header_field(
                       name  = '~server_protocol'           
                       value = 'HTTP/1.1' ).
Es kann auch hilfreich sein den API-Aufruf parallel mit einem Tool wie z.B. Postman zu testen.
Vielen Dank für alle drei Antworten.

@IHe

Mit deiner Antwort konnte ich am meisten Anfangen als blutiger Anfänger. Ich arbeite tatsächlich mit Postman und versuche den Code in ABAP nachzubilden.

Ich habe mich eingelesen und bisschen was verändert und komme langsam auf den Hund.

Ich teile mit euch nun, um welche Schnittstelle es sich handelt. Aus Sicherheitsgründen habe ich das erst vermieden.

Was ich nun meiner Meinung nach machen muss:

1.Ich habe einen API Key zugewiesen bekommen, den ich via "query params" dem Request "mitgeben" muss.

Mein Versuch mit:
li_client->request->set_header_field(
name = '"privater key den ich nicht teilen kann"'
value = '"privater Value den ich nicht teilen kann' ).

hat nicht funktioniert. Habt ihr Tipps oder Tutorials wo das erklärt wird? Habe schon stundenlang youtube videos geschaut und finde nix.

2. Fehlermeldung sieht jetzt so aus:

Error Number 1

ICM_HTTP_SSL_ERROR

Ich habe versuche das SSL-Zertifikat von der API aus dem Browser zu exportieren und ins SAP einzuspielen unter /SM59. Hat leider nicht funktioniert.

Habt Ihr dafür einen Hinweis oder Lösung? Liegt es an der Firewall?


Mein Code sieht nun so aus:

Code: Alles auswählen.

REPORT  ZKGR_API_AUFRUF_TEST.

DATA: lv_code          TYPE i,
      lv_url           TYPE string,
      li_client        TYPE REF TO if_http_client,
      lt_errors        TYPE TABLE OF string,
      lv_error_message TYPE string,
      lv_json_data     TYPE string,
      lv_http_rc       TYPE string,
      lv_reason        TYPE string.



lv_url = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/info?id=1'.

cl_http_client=>create_by_url(
  EXPORTING
    url           = lv_url
    ssl_id        = 'ANONYM'

  IMPORTING
    client        = li_client ).

  li_client->request->set_header_field(
                       name  = '~request_method'
                       value = 'GET' ).
  li_client->request->set_header_field(
                       name  = '~server_protocol'
                       value = 'HTTP/1.1' ).
  li_client->request->set_header_field(
                       name  = '*privater API KEY "name" den ich nicht teilen kann*'
                       value = 'privater API KEY VALUE den ich nicht teilen kann*' ).


li_client->send( ).
li_client->receive(
  EXCEPTIONS
    http_communication_failure = 1
    http_invalid_state         = 2
    http_processing_failed     = 3
    OTHERS                     = 4 ).
IF sy-subrc <> 0.
  WRITE: / 'Error Number', sy-subrc, /.
*  MESSAGE ID sy-msgid TYPE A NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  li_client->get_last_error(
    IMPORTING
      message = lv_error_message ).
  SPLIT lv_error_message AT cl_abap_char_utilities=>newline INTO TABLE lt_errors.
  LOOP AT lt_errors INTO lv_error_message.
    WRITE: / lv_error_message.
  ENDLOOP.
  RETURN.
ENDIF.


IF lv_code = 404.
  WRITE: / lv_url, ': not ok'.
ENDIF.

IF lv_code = 200.
  WRITE: / lv_url, ': OK'.
  WRITE: /.

  lv_json_data = li_client->response->get_cdata( ).
  WRITE lv_json_data.
ENDIF.

Viele Grüße,

sap_koun

Re: SAP REST API Aufruf Problem / SSL-Zertifikat Überprüfung

Beitrag von qyurryus (Specialist / 107 / 81 / 45 ) »
Hast du den ALLE Zertifikate in der Kette mit der STRUST eingespielt? Müssten drei Zertifikate sein.

Re: SAP REST API Aufruf Problem / SSL-Zertifikat Überprüfung

Beitrag von sap_koun (ForumUser / 29 / 24 / 0 ) »
qyurryus hat geschrieben:
24.08.2021 17:14
Hast du den ALLE Zertifikate in der Kette mit der STRUST eingespielt? Müssten drei Zertifikate sein.
Wie kommst du auf drei Zertifikate?
Ich habe eins eingespielt.


Hast du eine Idee wegen den "query params" ?

Re: SAP REST API Aufruf Problem / SSL-Zertifikat Überprüfung

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
sap_koun hat geschrieben:
24.08.2021 17:17
qyurryus hat geschrieben:
24.08.2021 17:14
Hast du den ALLE Zertifikate in der Kette mit der STRUST eingespielt? Müssten drei Zertifikate sein.
Wie kommst du auf drei Zertifikate?
Ich habe eins eingespielt.
Dann fehlen dir vermutlich noch zwei 😉
Außer das Zertifikat ist bereits ein Root-Zertifikat, sprich es gibt kein weiteres Zertifikat welches dieses Zeritfikat zertifiziert.

Bei Zertifikaten gibt es meist eine sog. "Kette":
Firma A (Zertifikat A) garantiert Firma B (Zertifikat B) garantiert Firma C (Zertifikat C). Somit ist Firma A (Zertifikat A) ein sog. Root-Zertifikat. Wenn du nur dein direktes Zertifikat (C) in der STRUST eingespielt hast, fehlen leider die Credentials für die höheren Zertifikate und es kann keine SSL-Verbindung aufgebaut werden. Daher vermutlich auch der ICM_HTTP_SSL_ERROR.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
sap_koun

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: SAP REST API Aufruf Problem / SSL-Zertifikat Überprüfung

Beitrag von IHe (Specialist / 142 / 35 / 45 ) »
Nicht vergessen nach Installation des Zertifikats auch den ICM neu zu starten, sonst wird das neue Zertifikat noch nicht berücksichtigt: Transaktion SMICM, Menüfunktion Administration|ICM|Soft beenden|Global.

Ein Blick ins ICM-Tracefile könne nach einem Verbindungsversuch ggf. auch nähere Infos bieten, was genau fehlt.

Eine Query bei GET kannst du folgendermaßen absetzen:

Code: Alles auswählen.

cl_http_utility=>set_query( request = li_client->request
                            query   = iv_query ).
Die Query ist hierbei ein einfacher String.

Folgende Benutzer bedankten sich beim Autor IHe für den Beitrag:
sap_koun

Ingo Hoffmann

ECC|S/4HANA|BTP
dbh SAP Solutions

Re: SAP REST API Aufruf Problem / SSL-Zertifikat Überprüfung

Beitrag von sap_koun (ForumUser / 29 / 24 / 0 ) »
IHe hat geschrieben:
25.08.2021 06:59


Eine Query bei GET kannst du folgendermaßen absetzen:

Code: Alles auswählen.

cl_http_utility=>set_query( request = li_client->request
                            query   = iv_query ).
Die Query ist hierbei ein einfacher String.
Hallo Herr Hoffmann,

ich bin nun jetzt fast am Ziel.
Aber das mit dem Query verstehe ich noch nicht ganz.

bei mir sieht das folgendermaßen aus. Und es funktioniert noch nicht.

Code: Alles auswählen.

CONSTANTS: lc_trans_url TYPE string VALUE 'https://pro-api.coinmarketcap.com//v1/cryptocurrency/quotes/latest?id=1',
           lc_sth_name  TYPE string VALUE 'CMC_PRO_API_KEY',
           lc_sth_apikey TYPE string VALUE 'XXXXX-XXXX-XXXXX-XXXX-XXXX'.
Ich habe einen KEY "CMC_PRO_API_KEY" bzw. das ist der Name, der notwendig ist.
Und den EIGENTLICHEN Key "xxxx-xxxx-xxxx-xxxx-xxxx-xxxx".

Nun wie gebe ich das SAP gescheit "mit" ?

In Postman und im Browser funktioniert der Aufruf. Im SAP noch nicht.

Beispiel wie es funktioniert im Browser:

https://pro-api.coinmarketcap.com/v1/cr ... -xxxx-xxxx


Viele hartnäckige Grüße,

sap_koun

Re: SAP REST API Aufruf Problem / SSL-Zertifikat Überprüfung

Beitrag von IHe (Specialist / 142 / 35 / 45 ) »
Hallo sap_koun,

die Query ist im Prinzip das, was in deinem Beispiel als Parameter an die URL angehangen wurde: "id=1&CMC_PRO_API_KEY=xxxx-xxxx-xxxx-xxxx-xxxx"

Ich glaube es geht genauso mittels der append_field_url-Methode (noch nie selbst verwendet):

Code: Alles auswählen.

lo_http_client->append_field_url(
           EXPORTING
               name = 'id' 
               value = '1' 
           CHANGING
               url = lv_url ).
lo_http_client->append_field_url(
         EXPORTING
              name = 'CMC_PRO_API_KEY' 
              value = 'xxxx-xxxx-xxxx-xxxx-xxxx' 
        CHANGING
              url = lv_url ).

Folgende Benutzer bedankten sich beim Autor IHe für den Beitrag:
sap_koun

Ingo Hoffmann

ECC|S/4HANA|BTP
dbh SAP Solutions

Seite 1 von 1

Vergleichbare Themen

3
Antw.
470
Views
SAP ABAP Rest aufruf: http communication failure?
von sap_koun » 29.12.2022 01:03 • Verfasst in ABAP® für Anfänger
0
Antw.
1202
Views
10
Antw.
3607
Views
Dynpro 200 Aufruf problem
von badang » 22.04.2006 21:19 • Verfasst in Dialogprogrammierung
1
Antw.
1594
Views
Problem mit BAPI-Aufruf !?!?!?!
von Gast » 29.09.2004 12:32 • Verfasst in Web-Dynpro, BSP + BHTML
5
Antw.
174
Views
Problem bei CREATE_XL_THEME aufruf von get_theme
von khb » 23.08.2022 14:26 • Verfasst in ABAP® Core

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.