Jak wygenerować klienta REST API z linkami nawigującymi?

0

Cześć,

Próbuję wygenerować przy użyciu OpenAPI-Generator klienta API restowego, które ma w response link do kolejnej strony wynikow tj. cos takiego: response.Link.NextPage.
response.Link.NextPage to po prostu request jaki trzeba wykonać do pobrania kolejnej strony wyników.
Niestety kod wygenerowany przez ten generator nie pozwala bezpośrednio wywołać czegoś takiego, bo wszystko jest ładnie opakowane w obiekty.
Request zawiera wiele parametrów, które mogą się różnić dla poszczególnych stron.
Mógłbym teoretycznie sparsować sobie string request i przekazać do kolejnego wywołania serwisu te parametry, ale wydaje mi się, że to nie jest najlepszy pomysł.

Czy istnieje jakiś sposób na to aby generator wygenerował mi kod, którym mógłbym przeiterować łatwo po wszystkich stronach wyników?

1

Ale ewangeliści REST mówią, że to dobrze że robi się recznie

Jak wszyscy wiedzą, w protokołąch binarnych / generowanych z jakiegoś schematu ukrywają się agresywne diabły, ale na szczęście zostały w 99.9% wybite przy pomocy święconej wody.

0

Jeśli wymyśliłeś rozwiązanie tzn. sparsowanie to znaczy, że tak trzeba zrobić.

Obiekt czyli co? json masz?
To teoretycznie json.parse to otrzymasz obiekt.

W sumie akurat nie znam tego openapi generatora, ale obiekty się nawet łatwiej przetwarza od tekstu, bo masz jednak pola.
No w dynamicznych językach dalej to są słowniki, nie jak w C++ na poziomie języka, a w hashmapie.

Czyli znasz rozwiązanie, ale możesz też podać więcej szczegółów jak to jak wyglądają dane, które masz i jak mają wyglądać.
Lub coś więcej, bo ja kompletnie nic nie rozumiem z opisu, to raczej większość osób też nic nie zrozumiała.

0

Dzisiaj wieczorem wysle przykladowy kod i dane api.

0
AnyKtokolwiek napisał(a):

Ale ewangeliści REST mówią, że to dobrze że robi się recznie

Jak wszyscy wiedzą, w protokołąch binarnych / generowanych z jakiegoś schematu ukrywają się agresywne diabły, ale na szczęście zostały w 99.9% wybite przy pomocy święconej wody.

Tak, ale nie muszę tego kodu pisać ręcznie i jest to w dużej mierze taki dummy kod.
Imo użycie generatora pozwala na zaoszczędzenie dużej ilości czasu.

0
Autysta napisał(a):

Jeśli wymyśliłeś rozwiązanie tzn. sparsowanie to znaczy, że tak trzeba zrobić.

Chciałbym uniknąć pisania tej metody, wolałbym żeby generował mi ją generator.

Obiekt czyli co? json masz?

Tak, mam json.

To teoretycznie json.parse to otrzymasz obiekt.

Tak, otrzymam obiekt, który mogę albo napisać sam albo obiekt, który będzie wygenerowany przez generator.

W sumie akurat nie znam tego openapi generatora, ale obiekty się nawet łatwiej przetwarza od tekstu, bo masz jednak pola.

Tak, nie mówię tutaj o tym, żeby ręcznie parsować json-string, zawsze będę mieć obiekty.
Mam 2 możliwości.

  1. Napisać sobie kod obiektów sam
  2. Użyć generatora
    Wolałbym użyć generatora, bo przepisywanie z json na obiekty C# ręcznie wydaje mi się mało ambitnym zadaniem.

Lub coś więcej, bo ja kompletnie nic nie rozumiem z opisu, to raczej większość osób też nic nie zrozumiała.

W sumie napisałem sobie coś takiego:


            while (response.Links.Next != null)
            {
                var uri = new Uri(response.Links.Next);
                var parameters = uri.Query.TrimStart('?')
                    .Split('&')
                    .Select(param => param.Split('='))
                    .ToDictionary(parts => parts[0], parts => parts[1]);

                response = instance.GetVehicles(parameters["State"], parameters["DateFrom"], parameters["DateTo"], parameters["page"]);
                //process response
            }

gdzie response.Links.Next to np. https://api/vehicles?State=california&DateFrom=2024-01-01&DateTo=2024-01-02&page=1 dla pierwszych wyników
pierwsza strona wyników zawiera w response.Links.Next np. https://api/vehicles?State=california&DateFrom=2024-01-01&DateTo=2024-01-02&page=2
trzecia strona wyników zawiera w response.Links.Next https://api/vehicles?State=california&DateFrom=2024-01-01&DateTo=2024-01-02&page=3
czwarta (ostatnia) strona wyników zawiera w response.Links.Next null.

1 użytkowników online, w tym zalogowanych: 0, gości: 1