Web Service, obsługa XML

Web Service, obsługa XML
forritarik
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:39
0

Cześć,

Ostatnio dostałem zadanie z gwiazdką. Mam zbudować Web Service w C++ Builder (REST). I tutaj pierwsze pytanie do Państwa.
Czy możecie polecić jakieś fajne materiały na ten temat (oczywiście sam staram się ogarniać temat na google i youtube)?

Obecnie zaczynam rozkminiać temat i jestem na etapie utworzenia klienta którym odpytuję jakąś stronkę (w moim przypadku OpenWeatherMap) i otrzymuję odpowiedź w postaci XML, i tutaj wszystko działa bez zarzutu. Natomiast nie wiem kompletnie jak obsłużyć tego XML tzn. sparsować go, wyciągnąć z niego interesujące mnie informacje i np. wrzucić je do bazy?! Proszę o jakieś podpowiedzi.

i ostatnie pytanie (jak na razie). Jak sprawdzić jakie zapytanie idzie z klienta do serwisu? Korzystam na razie z komponentów RESTClient, RESTRequest i RESTResponse. W RESTClient w BaseURL ustawiem bazowy adres a w Request ustawiam kilka parametrów ale jak podejżeć jakie kompletne zapytanie idzie do serwisu (bazeURL + parametry)?

pozdrawiam

edytowany 3x, ostatnio: forritarik
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Silesia/Marki
  • Postów:5505
1

Nie jestem programistą C++ więc przyszedłem tu sobie tylko ponarzekać
W twoim pytaniu jest kilka nieścisłości:

  1. Najpierw piszesz że Web Service, obsługa XML (co jednoznacznie kojarzy mi się z SOAP), a potem piszesz że REST (REST prawie zawsze używa JSONa chociaż teoretycznie może XMLa) - ten punkt to tylko moje marudzenie
  2. a teraz na poważnie, jestem na etapie utworzenia klienta - to budujesz serwis/webservis/microservis czy klienta do odpytywania bo się pogubiłem?
  3. Natomiast nie wiem kompletnie jak obsłużyć tego XML - a skąd my mamy to wiedzieć? co jest napisane w zadaniu?
  4. Jak sprawdzić jakie zapytanie idzie z klienta do serwisu? dobry system ma zwykle wdrożone logowanie i tam się odkłada takie dane

Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
edytowany 2x, ostatnio: KamilAdam
MarekR22
REST może mieć wersję xml i wcale nie musi być to SOAP. So inne xml-owe rozwiązania.
KamilAdam
Przecież to napisałem XD REST prawie zawsze używa JSONa chociaż teoretycznie może XMLa ale jeszcze takiej kombinacji nie widziałem
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
0
Kamil Żabiński napisał(a):

Nie jestem programistą C++ więc przyszedłem tu sobie tylko ponarzekać

Czy C++ Builder to jeszcze C++, pozostaje pytaniem otwartym. :)


Bo C to najlepszy język, każdy uczeń ci to powie
KamilAdam
Tego też nie jestem programistą :P
forritarik
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:39
0

Może rzeczywiście piszę trochę nieskładnie, bo jak pisałem jestem w temacie totalnie początkujący, więc mam prawo trochę "pływać" :)
To może uporządkujmy.
mam napisać web serwis który będzie pośrednikiem w wymianie danych pomiędzy dwoma systemami (w postaci REST) i oczywiście zmodyfikować jeden z nich żeby wysyłał zapytanie w postaci XML do systemu docelowego i obsługiwać odpowiedzi w postaci XML z sys. docelowego, czyli jeżeli dobrze rozumiem trzeba napisać web serwis od początku, żeby potrafił odebrać zapytanie od klienta i wysłać ją do systemu docelowego i żeby potrafił odebrać odpowiedź od systemu docelowego i przesłać ją klientowi (tak to rozumiem jeżeli coś pokręciłem to mnie poprawcie) . Dodatkowo muszę zmodyfikować klienta, czyli system źródłowy, który ma wysyłać do web serwisu zapytania i obsługiwać odpowiedzi od niego.

Jak zacząłem googlać temat trafiłem na filmik który przedstawia tworzenia takiego małego klienta który odpytuje serwis OpenWeatherMap o pogodę dla danej lokalizacji. Obejrzałem i zrobiłem to co w nim przedstawiono i wszystko wyszło OK. Potrafię odpytać to API i otrzymuję odpowiedź w postaci XML. Teraz chciałbym się nauczyć jak odczytać i wyciągnąć interesujące mnie dane z tego XML-a i dalej je wykorzystać, czy to wrzucić na jakiegoś grida czy do bazy, to już jest sprawa drugorzędna.

I chodziło mi właśnie o to że może ktoś się już z czymś takim spotkał i da jakieś wskazówki.
W międzyczasie natrafiłem na jakąś bibliotekę XMLParser ale nie potrafię jej dodać do C++Builder-a mimo że piszę że się da. Link: http://www.destructor.de/xmlparser/doc.htm
Może ktoś miał doświadczenie z inną biblioteką, łatwą w użytkowaniu i może coś podpowiedzieć :) z co z góry dzięki

pozdro

edytowany 1x, ostatnio: forritarik
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
0

C++ jako język pozbawiony refleksji nadaje się bardzo słabo do tego celu


Bo C to najlepszy język, każdy uczeń ci to powie
DP
Microserwisy pisze się w C++
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Silesia/Marki
  • Postów:5505
1
AnyKtokolwiek napisał(a):

C++ jako język pozbawiony refleksji nadaje się bardzo słabo do tego celu

A wiesz o tym, że dedykowane dla Scali biblioteki do JSONa nie używają refleksji? Dzięki temu są szybsze i wydajniejsze. Wystarczy dla każdej klasy danych utworzyć funkcję mapującą i konstruktor ze wszystkimi parametrami. Bibliotek C++ nie znam, ale brak refleksji jeszcze nie jest przeszkodą w pisaniu czegoś takiego. Bardziej bym się martwił wyciekami pamięci


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
AK
No tak, po przygotowaniu klas nie tzreba refleksji. Java zna takie biblioteki też, choć nie wiem czy XML. Dzięki za uwagę.
tajny_agent
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad rok
  • Postów:1340
1
forritarik napisał(a):

Potrafię odpytać to API i otrzymuję odpowiedź w postaci XML. Teraz chciałbym się nauczyć jak odczytać i wyciągnąć interesujące mnie dane z tego XML-a i dalej je wykorzystać, czy to wrzucić na jakiegoś grida czy do bazy, to już jest sprawa drugorzędna.

Poszukaj jakiejś biblioteki do XML(RapidXML,FastXML,etc. jest tego sporo) i wyciągnij z pliku to co cię interesuje.

AnyKtokolwiek napisał(a):

C++ jako język pozbawiony refleksji nadaje się bardzo słabo do tego celu

Co ma refleksja do parsowania XML?


"I love C++. It's the best language in the world right now for me to write the code that i need and want to write"
~ Herb Sutter
forritarik
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 4 lata
  • Postów:39
0

A masz jakieś doświadczenie z tymi parserami? Możesz coś podpowiedzieć np. RapidXML, jak to się instaluje/"dorzuca" do C++ Buildera?

Tak może żeby pokazać co muszę "obrobić" to posłużę się konkretnym przykładem:
Jak napisałem powyżej odpytuję API na portalu OpenWeatherMap i pytam o londyn. W odpowiedzi dostaję XML-a w postaci:

Kopiuj
<?xml version="1.0" encoding="UTF-8"?>
<current>
	<city id="2643743" name="London">
		<coord lon="-0.13" lat="51.51"/>
		<country>GB</country>
		<timezone>0</timezone>
		<sun rise="2020-03-19T06:04:43" set="2020-03-19T18:11:39"/>
	</city>
	<temperature value="279.44" min="278.15" max="281.48" unit="kelvin"/>
	<feels_like value="275.31" unit="kelvin"/>
	<humidity value="87" unit="%"/>
	<pressure value="1026" unit="hPa"/>
	<wind>
		<speed value="4.1" unit="m/s" name="Gentle Breeze"/>
		<gusts/>
		<direction value="60" code="ENE" name="East-northeast"/>
	</wind>
	<clouds value="90" name="overcast clouds"/>
	<visibility value="6000"/>
	<precipitation mode="no"/>
	<weather number="804" value="overcast clouds" icon="04d"/>
	<lastupdate value="2020-03-19T07:35:29"/>
</current>

No i teraz chcę wyciągnąć interesujące mnie informacje np. kraj, miasto, temperatura i wilgotność (myślę że tyle wystarczy).
Dłubałem wczoraj cały wieczór ale bez rezultatów.

tajny_agent
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad rok
  • Postów:1340
0
forritarik napisał(a):

A masz jakieś doświadczenie z tymi parserami? Możesz coś podpowiedzieć np. RapidXML, jak to się instaluje/"dorzuca" do C++ Buildera?

Używam Qt, więc korzystam z ichniejszych parserów XML.
Patrząc na przykładowy kod użycie RapidXML wygląda na dość proste i przyjemne.
A z tego co piszą na stronie, to "instalacja" ogranicza się do dodania include.

If you are looking for a stable and fast parser, look no further. Integration with your project will be trivial, because entire library is contained in a single header file, and requires no building or configuration.


"I love C++. It's the best language in the world right now for me to write the code that i need and want to write"
~ Herb Sutter

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.