AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Rest Json Fehler 415 unsopported Media Type
Thema durchsuchen
Ansicht
Themen-Optionen

Rest Json Fehler 415 unsopported Media Type

Ein Thema von josef-b · begonnen am 17. Jan 2022 · letzter Beitrag vom 17. Jan 2022
Antwort Antwort
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#1

Rest Json Fehler 415 unsopported Media Type

  Alt 17. Jan 2022, 15:37
Hallo,

ich arbeite mich gerade ein wenig ein in Rest / Json.

Konkret geht es um den Datenaustausch zu einem Gambio Shop.

Ich kann problemlos mit TRestClient, TRestRequest, TRestResponse und THTTP BasichAuthenticator daten downloaden
(z.B. Produkte aus dem Webshop).

Wenn ich jetzt aber z.B. den Preis ändern möchte, kommt die Fehlermeldung:

415 unsupported Media Type

Mein Code:

Delphi-Quellcode:

Request.ResetToDefaults;
Request.Method := rmPUT;
Request.Resource := 'api.php/v2/product_prices/{product_id}';

Request.Addparameter( 'product_id','7' );
Request.Addparameter( 'price','10' );
Request.Execute;
Ist mit den Parametern das so OK?

ich habe was beim googeln gefunden evtl mit. zusätzlichen Parametern im header?

Bin auf dem Gebiet leider totaler newbie

Geändert von josef-b (17. Jan 2022 um 15:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Rest Json Fehler 415 unsopported Media Type

  Alt 17. Jan 2022, 15:58
Zunächst fehlt dir die Authorization und einen Body solltest Du auch mitschicken. Wenn es sich um eine Neuentwicklung handelt, solltest Du auch wohl besser die neueste API Version verwenden (V3 statt V2).

Die Definition wie der Request und insbesondere der Body auszusehen hat, steht hier
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Rest Json Fehler 415 unsopported Media Type

  Alt 17. Jan 2022, 16:18
Danke für die schnelle Antwort.

Die Authentizierung klappt, habe ich in der Client-Komponente eingebenen mit Authenticator-Komponente verknüpft.

Ohne Authentifzierung käme 401 unauthorized.

Die Gambio - Dokumentation habe ich. Die übrigen Parameter muss ich doch nicht übergeben/belegen oder?

Es reicht doch die Produkt-ID und der Preis?

Was meinst du genau mit ich muß einen Body-übergeben?

Geändert von josef-b (17. Jan 2022 um 16:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Rest Json Fehler 415 unsopported Media Type

  Alt 17. Jan 2022, 16:35
415 kommt weil du einen ungültigen Query Parameter "price" übergibst. Die Preisdaten sollen aber im Body des Request stehen. Im o.a. Link siehst Du, wie dieses JSON auszusehen hat (gxproductprices-Struktur).
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.445 Beiträge
 
Delphi 12 Athens
 
#5

AW: Rest Json Fehler 415 unsopported Media Type

  Alt 17. Jan 2022, 16:42
Die Product ID gehört ja in die URL. Das gibt man bei AddParameter an:
Delphi-Quellcode:

Request.Addparameter('product_id', '7', TRESTRequestParameterKind.pkURLSEGMENT);
Für den Body solltest du ein passendes Objekt als JSON übergeben:
Delphi-Quellcode:
type
  { unvollständige Klasse ohne richtigen Support für GroupPrices und GraduatedPrices. Erweiterung als Übung :) }
  TUpdateProductPrices = class
  type
    TGroupPrice = class
    type
      TGraduatedPrice = class
        FGraduatedPrice: Double;
        FThreshold: Double;
      end;
    private
      FCustomerGroupId: Integer;
      FGraduatedPrices: TArray<TGraduatedPrice>;
      FGroupPrice: Double;
    end;
  private
    FGroupPrices: TArray<TGroupPrice>;
    FPrice: Double;
  public
    property Price: Double read FPrice write FPrice;
  end;

...

  instance := TUpdateProductPrices.Create;
  try
    instance.Price := 10;
    Request.AddBody<TUpdateProductPrices>(instance); // hier wird das JSON intern zusammengebaut
  finally
    instance.Free;
  end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Rest Json Fehler 415 unsopported Media Type

  Alt 17. Jan 2022, 17:57
Geht das mit addbody evtl. auch ohne Klassen zu erstellen?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.445 Beiträge
 
Delphi 12 Athens
 
#7

AW: Rest Json Fehler 415 unsopported Media Type

  Alt 17. Jan 2022, 18:42
Geht das mit addbody evtl. auch ohne Klassen zu erstellen?
Ja, wenn du das JSON bzw. JSONObject selbst zusammenbaust.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Rest Json Fehler 415 unsopported Media Type

  Alt 17. Jan 2022, 20:12
Danke für Eure Tips, ich stand echt im Wald

Ich habs dann jetzt so gemacht:

Delphi-Quellcode:

procedure TFRest.BtnSetPreisClick(Sender: TObject);
var obj : TJsonObject;
objGroupPrices : TJsonArray;
begin

Req.ResetToDefaults;
Req.Method := rmPUT;
Req.Resource := 'api.php/v2/product_prices/{product_id}';
EditResource.editvalue := req.Resource;

Req.Addparameter('product_id', '7', TRESTRequestParameterKind.pkURLSEGMENT);

Obj := TJSONObject.Create;
ObjGroupPrices := TJSonArray.Create;

obj.AddPair('groupPrices',objGroupPrices);
obj.Addpair('price' ,TJsonNumber.create(10));

memo1.clear;
memo1.Lines.Add(obj.toJson);

req.addbody(obj);

objGroupPrices.free;

Req.Execute;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz