OpenApi3 Swagger ile uygulama?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

OpenApi3 Swagger ile uygulama?

Mesaj gönderen mussimsek »

Merhaba,

Openapi3 ile hazırlanmış bir API setiyle çalışmam lazım. Kısaca karşı programa her gün veri göndereceğim ve alacağım. Şurada benzer bir API örneği var : https://petstore.swagger.io/

Postman isimli bir uygulama bulup, denemeleri yaptım. Ancak delphi tarafında bu işi en hızlı nasıl geliştirebilirim? İşi her gün çalışacak şekilde otomatiğe bağlamak istiyorum.

Teşekkürler.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: OpenApi3 Swagger ile uygulama?

Mesaj gönderen ertank »

Burada basit JSON iletişim var. Sormak istediğiniz JSON stringleri işlemleri nasıl serialize/de-serialize ederim ise ben mORMot framework öneririm.
https://synopse.info/fossil/wiki/Synopse+OpenSource
https://github.com/synopse/mORMot.git/

Özetle record based json çalışabiliyorsunuz. Class kullanmıyor. Öğrenme süreci var. Kendine has bazı özellikleri var. Ancak başlangıç için aşağıdaki iki örneğe bakabilirsiniz.

Order için olan standart json string için serialize/de-serialize örneğidr.
User için olan json array string için serialize/de-serialize örneğidir.

Örnek kod Delphi 10.3.3 ve mORMot (SynopseCommit.inc) sürüm 1.18.6045 ile çalışmaktadır.

Kod: Tümünü seç

uses
  SynCommons;

type
  TOrder = packed record
    id: Integer;
    petId: Integer;
    quantity: Integer;
    shipDate: TDateTime;
    status: string;
    complete: Boolean;
  end;

  TUser = packed record
    id: Integer;
    username: string;
    firstName: string;
    lastName: string;
    email: string;
    password: string;
    phone: string;
    userStatus: Integer;
  end;
  TUsers = TArray<TUser>;


procedure TForm1.Button1Click(Sender: TObject);
var
  Json: string;
  OrderRec: TOrder;
  ReadRec: TOrder;
begin
  // /store/order için örnek
  OrderRec.id := 1;
  OrderRec.petId := 2;
  OrderRec.quantity := 3;
  OrderRec.shipDate := Now();
  OrderRec.status := 'placed';
  OrderRec.complete := True;

  Json := EmptyStr;
  Json := string(SynCommons.RecordSaveJSON(OrderRec, TypeInfo(TOrder)));
  if Json.IsEmpty then
  begin
    ShowMessage('Json oluşturmada sorun oluştu.');
    Exit();
  end;

  ShowMessage('Json (order): ' + Json);

  if not SynCommons.RecordLoadJSON(ReadRec, RawUTF8(Json), TypeInfo(TOrder)) then
  begin
    ShowMessage('Json okumada sorun oluştu.');
    Exit();
  end;

  ShowMessage('ReadRec.shipDate: ' + DateToStr(ReadRec.shipDate));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Json: string;
  Users: TUsers;
  ReadUsers: TUsers;
begin
  // /user/createWithArray için örnek
  SetLength(Users, 2);
  Users[0].id := 1;
  Users[0].username := 'user1';
  Users[0].firstName := 'Firstname1';
  Users[0].lastName := 'Lastname1';
  Users[0].email := 'a@b.com';
  Users[0].password := '1234';
  Users[0].phone := '01234567890';
  Users[0].userStatus := 100;

  Users[1].id := 2;
  Users[1].username := 'user2';
  Users[1].firstName := 'Firstname2';
  Users[1].lastName := 'Lastname2';
  Users[1].email := 'b@b.com';
  Users[1].password := '1235';
  Users[1].phone := '01234567891';
  Users[1].userStatus := 101;


  Json := EmptyStr;
  Json := string(SynCommons.DynArraySaveJSON(Users, TypeInfo(TUsers)));
  if Json.IsEmpty then
  begin
    ShowMessage('Json oluşturmada sorun oluştu.');
    Exit();
  end;

  ShowMessage('Json (createWithArray): ' + Json);

  if not SynCommons.DynArrayLoadJSON(ReadUsers, RawUTF8(Json), TypeInfo(TUsers)) then
  begin
    ShowMessage('Json okumada sorun oluştu.');
    Exit();
  end;

  ShowMessage('ReadUsers[1].e-mail: ' + ReadUsers[1].email);
end;
Özetle;
- record tanımlarınız "packed record" olarak tanımlanmalı.
- Delphi 7 ile kullanacak iseniz RTTI sebebi ile veya Json içeriğinden herşeyi değil belli kısımları okumak istiyor, gerisini gözardı etmek istiyorsanız; her bir record için bir string karşılığını oluşturmalı ve TTextWriter sınıfını kullanarak register etmelisiniz.

Kod: Tümünü seç

const
  __TOrder = 'id:Integer,petid:Integer,quantity:Integer,shipDate:TDateTime,status:string,complete:Boolean';

initialization
  TTextWriter.RegisterCustomJSONSerializerFromText(TypeInfo(TOrder), __TOrder).Options = [soReadIgnoreUnknownFields];
Gerekli try..except kontrolleri özellikle de-serialize işlemlerine eklenmelidir. Özel durumlarda exception oluşur.

Yukarıdaki bilgiler sizin elinizdeki işi bitirmeniz için yeterli olacaktır.
Cevapla