{"id":34354,"date":"2019-10-31T21:57:51","date_gmt":"2019-10-31T18:57:51","guid":{"rendered":"https:\/\/prohoster.info\/blog\/pisali-api-porvali-xml-dva\/"},"modified":"2019-10-31T21:57:51","modified_gmt":"2019-10-31T18:57:51","slug":"pisali-api-porvali-xml-dva","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/pisali-api-porvali-xml-dva","title":{"rendered":"API geschrieben \u2014 XML (zwei) zerrissen","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Die erste API von \u041c\u043e\u0435\u0433\u043e\u0421\u043a\u043b\u0430\u0434\u0430 erschien vor 10 Jahren. Seitdem arbeiten wir an den bestehenden API-Versionen und entwickeln neue. Und einige Versionen der API wurden schon eingestellt. <\/p>\n<p>In diesem Artikel wird es viel geben: wie die API erstellt wurde, warum sie f\u00fcr den Cloud-Service ben\u00f6tigt wird, was sie den Benutzern bietet, auf welche Fallstricke wir gesto\u00dfen sind und was wir als N\u00e4chstes tun m\u00f6chten. <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nIch hei\u00dfe Oleg Alexeev <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/oalexeev\/\" class=\"user_link\">oalexeev<\/a><\/noindex>, ich bin technischer Direktor und Mitbegr\u00fcnder von \u041c\u043e\u0435\u0433\u043e\u0421\u043a\u043b\u0430\u0434\u0430. <\/p>\n<h2>Warum eine API f\u00fcr den Service erstellen<\/h2>\n<p>\nUnsere Kunden, das sind Zehntausende von Unternehmern, nutzen aktiv Cloud-L\u00f6sungen: Banking, Online-Shops, Warenwirtschaft, CRM. Man verbindet sich mit einem \u2014 und schon wird es schwierig, aufzuh\u00f6ren. Und jetzt bieten der f\u00fcnfte, achte, zehnte Service den Unternehmern eine einfachere Arbeit, aber die Daten zwischen diesen Cloud-Services werden manuell \u00fcbertragen. Die Arbeit wird zum Albtraum.<\/p>\n<p>Eine offensichtliche L\u00f6sung besteht darin, den Benutzern die M\u00f6glichkeit zu geben, Daten zwischen Cloud-Services zu \u00fcbertragen. Zum Beispiel Daten als Dateien zu importieren und zu exportieren, die dann in den gew\u00fcnschten Service hochgeladen werden k\u00f6nnen. Die Dateien werden \u00fcblicherweise an das Format jedes Services angepasst. Das ist mehr oder weniger einfache Handarbeit, aber mit der steigenden Anzahl dieser Services wird es immer schwieriger, das zu erledigen.<\/p>\n<p>Deshalb ist der n\u00e4chste Schritt die API. Mit ihr gewinnt der Cloud-Service, indem er mehrere Services an einem Punkt verbindet. Das Entstehen eines solchen \u00d6kosystems zieht neue Kunden aufgrund zus\u00e4tzlicher M\u00f6glichkeiten an. Ein Produkt mit neuen Funktionen wird rentabler und n\u00fctzlicher.<\/p>\n<p>Wenn man eigene Schnittstellen erstellt, zieht das externe Verk\u00e4ufer in Form von Programmierern an, die dank der API von Ihrem Produkt erfahren. Sie beginnen, L\u00f6sungen auf der Grundlage der bereitgestellten API zu erstellen und verdienen Geld mit der Automatisierung der Aufgaben ihrer Kunden.<\/p>\n<p>Das Buchhaltungssystem von \u041c\u043e\u0435\u0433\u043e\u0421\u043a\u043b\u0430\u0434\u0430 basiert auf einfachen Prozessen. Das Wichtigste ist die Arbeit mit prim\u00e4ren Dokumenten, die M\u00f6glichkeit, Warenannahme und -versand durchzuf\u00fchren, und auf der Grundlage der Prim\u00e4rdaten Berichte f\u00fcr das Gesch\u00e4ft zu erhalten. Au\u00dferdem gibt es die Daten\u00fcbertragung, zum Beispiel an die Cloud-Buchhaltung, und deren Abruf aus Bankensystemen oder Einzelhandelsfl\u00e4chen. Au\u00dferdem arbeiten wir mit Online-Shops: Wir erhalten Informationen \u00fcber Produkte und senden Daten zu Best\u00e4nden.<\/p>\n<p><img decoding=\"async\" alt=\"API geschrieben \u2014 XML (zwei) zerrissen\" src=\"\/wp-content\/uploads\/2019\/05\/aefa36019217c463d2a513a9e025ebc7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Die erste API von \u041c\u043e\u0435\u0433\u043e\u0421\u043a\u043b\u0430\u0434\u0430<\/h2>\n<p>\nIn den 10 Jahren, in denen \u041c\u043e\u0435\u0433\u043e\u0421\u043a\u043b\u0430\u0434\u0430 mit der API arbeitet, haben wir zahlreiche Integrationen entwickelt, die den Datenaustausch erm\u00f6glichen, mit Banken arbeiten, Zahlungen durchf\u00fchren und externe Telefonie nutzen.<\/p>\n<p>Im ersten Jahr erm\u00f6glichten wir den Export beliebiger Daten im XML-Format. Zu dieser Zeit war es f\u00fcr die Benutzer viel verst\u00e4ndlicher und vertrauter, die Daten offline und nicht in einer Cloud zu speichern, und wir gaben ihnen das. Der Export wurde durch manuelles Exportieren aus der Benutzeroberfl\u00e4che gestartet. Man konnte also noch nicht wirklich von einer API sprechen. <\/p>\n<p>Damals begannen wir die Zusammenarbeit mit dem Unternehmen \u0420\u0443\u0441\u0430\u0433\u0440\u043e \u2014 sie nutzten bereits ein 'ausgereiftes' ERP zur Produktions- und Vertriebsplanung, w\u00e4hrend die Beladung von Waggons in den Werken im \u041c\u043e\u0451\u043c\u0421\u043a\u043b\u0430\u0434\u0435 automatisiert wurde. So entstanden die ersten Ans\u00e4tze einer echten API: Der Austausch zwischen unserem Dienst und dem ERP erfolgte durch das Versenden gro\u00dfer Dateien mit Daten zu allen Dokumentenarten. <\/p>\n<p>Das ist eine gute Option f\u00fcr den Batch-Datenaustausch, aber zusammen mit den Dokumenten musste man auch deren Abh\u00e4ngigkeiten \u00fcbermitteln: Informationen \u00fcber Produkte, Gesch\u00e4ftspartner und Lager. Solch ein Datenmix l\u00e4sst sich beim Export nicht so schwer generieren, beim Import jedoch ziemlich schwierig zu entwirren, da alle Informationen in einem Paket ankommen: sowohl \u00fcber neue Dokumente als auch \u00fcber bereits bestehende.<\/p>\n<p>Die erste XML-API lebte nicht lange \u2014 nach zwei Jahren begannen wir mit ihrer Umstrukturierung. Schon zu Beginn ihrer Arbeit begingen wir einige Fehler beim Aufbau der Programmierschnittstelle.<\/p>\n<p><img decoding=\"async\" alt=\"API geschrieben \u2014 XML (zwei) zerrissen\" src=\"\/wp-content\/uploads\/2019\/05\/3f1b04d030e7fcb5add795f8fd75d92b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>So wurde die XML-API erstellt: eine Illustration von einem unserer Architekten. \u00dcbrigens, erwarten Sie seine Artikel.<\/i><\/p>\n<p>Hier sind unsere Hauptfehler:<\/p>\n<ol>\n<li>Die JAXB-Deklaration wurde direkt an Entity Beans vorgenommen. F\u00fcr die Kommunikation mit der Datenbank nutzen wir Hibernate, und f\u00fcr diese Beans wurde ebenfalls die JAXB-Deklaration erstellt. Dieser Fehler trat fast sofort auf: Jede \u00c4nderung der Datenstruktur erforderte eine sofortige Benachrichtigung aller, die die API nutzen, oder den Aufwand, Umgehungsl\u00f6sungen zu finden, die die Kompatibilit\u00e4t mit der vorhergehenden Datenstruktur gew\u00e4hrleisteten.<\/li>\n<li>API entwickelte sich als eine Art Erg\u00e4nzung, und urspr\u00fcnglich haben wir nicht definiert, welcher Teil des Produkts er ausmacht. Wir haben auch nicht dar\u00fcber nachgedacht, ob die API etwas Wichtiges ist und ob wir r\u00fcckw\u00e4rtskompatibel f\u00fcr die ersten Kunden sein m\u00fcssen. F\u00fcr einen gewissen Zeitraum betrug die Anzahl der API-Nutzer etwa 5 % der insgesamt kleinen Nutzerbasis, und wir haben ihnen keine Beachtung geschenkt. Die damals durchgef\u00fchrte universelle Filterung f\u00fchrte dazu, dass wir als Backend verwendet wurden. Diese Filterung war ganz und gar kein GraphQL, sondern etwas \u00c4hnliches \u2014 sie funktionierte \u00fcber eine Vielzahl von Abfrageparametern. Mit so einem leistungsstarken Werkzeug war es f\u00fcr die Nutzer schwierig, sich zur\u00fcckzuhalten, und die Anfragen wurden so umgeleitet, dass sie direkt von der UI ihrer Online-Shops gesendet wurden. Die Situation wurde zu einer unangenehmen \u00dcberraschung, denn die Bereitstellung eines solchen Dienstes sollte andere Tarifierungen und ein ganz anderes Verst\u00e4ndnis der API als Produkt erfordern.<\/li>\n<li>Da sich die API nicht als Hauptprodukt entwickelte, wurde die API-Dokumentation nach dem Prinzip des Restes erstellt und ver\u00f6ffentlicht \u2014 durch Reverse Engineering. Dieser Ansatz scheint ziemlich einfach und bequem zu sein, widerspricht jedoch der Vertragsarbeit. Dabei gibt es eine Komponente mit einem festgelegten Funktionsschema. Der Entwickler implementiert sie gem\u00e4\u00df diesem Schema und den Anforderungen, die Komponente wird getestet, und der Kunde erh\u00e4lt ein Produkt, das den Vorstellungen des Analytikers entspricht. Reverse Engineering hingegen wirft ein Produkt auf den Markt, das einfach existiert: mit St\u00fctzen, seltsamen L\u00f6sungen und improvisierten Ans\u00e4tzen anstelle der ben\u00f6tigten Funktionalit\u00e4t. <\/li>\n<li>Der gesamte Anfragenfluss, der \u00fcber die API kam, konnte nicht mehr als ein Nginx- oder Application Server-Log analysiert werden. Dies erlaubte es nicht, Fachgebiete zu identifizieren, au\u00dfer sie nach Nutzern und Abonnenten zu unterteilen. Wenn keine M\u00f6glichkeit besteht, die Registrierung von Anwendungen oder Kunden zu regulieren, wird die Analyse der Situation unm\u00f6glich. Dieses Problem hatte in geringem Ma\u00dfe Auswirkungen auf die Entwicklung der API, es betrifft mehr das Verst\u00e4ndnis ihres Bedarfs und ihrer Funktionalit\u00e4t.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Versuch Nummer zwei: REST API<\/h2>\n<p>\nIm Jahr 2010 versuchten wir, ein System f\u00fcr den Austausch mit der Online-Buchhaltungssoftware BuchSoft zu entwickeln. Es kam nicht zustande. Doch im Verlauf der Integration entstand eine vollwertige API: ein REST-Service f\u00fcr den Austausch, bei dem keine Freiheiten wie RPC-Aufrufe vorhanden waren. Alle Kommunikation mit der API wurde auf den f\u00fcr REST typischen Modus umgestellt: In der Anfragezeile befindet sich der Name der Entit\u00e4t, und die durchzuf\u00fchrende Operation wird \u00fcber die HTTP-Methode festgelegt. Wir f\u00fcgten eine Filterung nach dem Aktualisierungszeitpunkt der Entit\u00e4ten hinzu, wodurch die Benutzer die M\u00f6glichkeit hatten, Replikationen mit ihren Systemen zu erstellen.<\/p>\n<p>Im gleichen Jahr wurde eine API f\u00fcr den Export von Lagerbest\u00e4nden und Warenbest\u00e4nden eingef\u00fchrt. \u00dcber die API wurden den Benutzern die wertvollsten Teile des Systems zug\u00e4nglich gemacht \u2013 der Austausch von Prim\u00e4rdokumenten sowie die Berechnung von Best\u00e4nden und Selbstkosten der Waren.<\/p>\n<p>Im Dezember 2015 ver\u00f6ffentlichte RetailCRM die erste Drittanbieter-Bibliothek f\u00fcr den Zugriff auf unsere API. Diese wurde ziemlich aktiv genutzt, w\u00e4hrend gleichzeitig die Beliebtheit des Dienstes insgesamt wuchs, und die Last auf der API wuchs schneller als die auf der Weboberfl\u00e4che. Eines Tages verwandelte sich das Wachstum in einen Anstieg der Last. <\/p>\n<p><img decoding=\"async\" alt=\"API geschrieben \u2014 XML (zwei) zerrissen\" src=\"\/wp-content\/uploads\/2019\/05\/86b289455db8a13f5583cd4eeb377970.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"API geschrieben \u2014 XML (zwei) zerrissen\" src=\"\/wp-content\/uploads\/2019\/05\/da221a6a122ff6d15bcbf9ea09758727.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUnd dieser Anstieg, auf den der Pfeil links hinweist, versetzte den Server, der unsere API bedient, in v\u00f6lliges Erstaunen. Eine Woche lang versuchten wir herauszufinden, was genau diese Last verursachte. Es stellte sich heraus, dass es die Anfragen waren, die von den Frontends der Kunden an unsere API weitergeleitet wurden. Rund 50 Kunden verursachten den gesamten Anstieg. Hier wurde uns einer unserer Fehler bewusst \u2013 die v\u00f6llige Abwesenheit von Limits. <\/p>\n<p>Letztendlich f\u00fchrten wir ein Limit f\u00fcr die Anzahl gleichzeitiger Anfragen ein. Mit einem Benutzerkonto konnten nicht mehr als zwei Anfragen gleichzeitig ge\u00f6ffnet werden. Das ist ausreichend f\u00fcr den Betrieb im Replikationsmodus f\u00fcr den Austausch von Daten im Batch-Modus. Diejenigen, die uns als Backend nutzen wollten, mussten sich von diesem Zeitpunkt an st\u00e4rker an die Tarife anpassen, da sie in ihren Programmen Arbeiten mit mehreren Konten implementierten.<\/p>\n<h2>Wir bringen Ordnung hinein<\/h2>\n<p>\nSchon seit 2014 wurde die Nachfrage nach der bestehenden API zu einem wichtigen Teil des Gesch\u00e4fts, und die API generierte das gr\u00f6\u00dfte Datenvolumen im Austausch von Daten mit den Kunden. Im Jahr 2015 starteten wir ein Projekt zur Ordnung der API. Wir w\u00e4hlten als Format JSON anstelle von XML und begannen, sie basierend auf den Besonderheiten zu entwickeln, die wir bei der Implementierung der vorherigen Version festgestellt hatten:<\/p>\n<ol>\n<li>Die M\u00f6glichkeit, Versionen zu verwalten. Die Versionierung erm\u00f6glicht die Entwicklung einer neuen Version, ohne die bestehende Anwendung zu beeintr\u00e4chtigen oder den Betrieb der Nutzer zu st\u00f6ren. <\/li>\n<li>Die M\u00f6glichkeit f\u00fcr den Benutzer, Metadaten in der Antwort zu sehen, die er erh\u00e4lt.<\/li>\n<li>Die M\u00f6glichkeit, gro\u00dfe Dokumente auszutauschen. Wenn wir ein Dokument mit mehr als 4-5 Tausend Positionen verarbeiten, wird dies f\u00fcr den Server zu einem Problem: lange Transaktionen, lange HTTP-Anfragen. Wir haben einen speziellen Mechanismus entwickelt, der es erm\u00f6glicht, das Dokument in Teilen zu aktualisieren und einzelne Positionen dieses Dokuments zu verwalten, indem wir sie an den Server senden.<\/li>\n<li>Replikationswerkzeuge \u2013 waren auch in der vorherigen Version vorhanden.<\/li>\n<li>Lastgrenzen \u2013 als Erbe der Stolpersteine, auf die wir in der vorherigen Version gesto\u00dfen sind. Wir haben Limits f\u00fcr die Anzahl der Anfragen in einem bestimmten Zeitraum, die Anzahl paralleler Anfragen und Anfragen von einer IP-Adresse eingef\u00fchrt.<\/li>\n<\/ol>\n<p>\nSeitdem haben wir zwei kleinere Versionen der API ver\u00f6ffentlicht und mehrere spezialisierte APIs gestartet, aber der grundlegende Ansatz blieb unver\u00e4ndert. Das aktualisierte Austauschformat und die neue Architektur erm\u00f6glichen es, M\u00e4ngel in der API viel schneller zu beheben.<\/p>\n<h2>API von \u041c\u043e\u0439\u0421\u043a\u043b\u0430\u0434 heute<\/h2>\n<p>\nHeute l\u00f6st die API von \u041c\u043e\u0439\u0421\u043a\u043b\u0430\u0434 viele Aufgaben:<\/p>\n<ul>\n<li>Datenaustausch mit Online-Shops, Buchhaltungssystemen, Banken;<\/li>\n<li>Abruf von Berechnungsdaten, Berichten;<\/li>\n<li>Nutzung als Backend f\u00fcr Client-Anwendungen \u2013 unsere mobilen Anwendungen und die Desktop-Kasse arbeiten \u00fcber die API<\/li>\n<li>Versand von Benachrichtigungen \u00fcber \u00c4nderungen der Daten in \u041c\u043e\u0439\u0421\u043a\u043b\u0430\u0434 \u2013 Webhooks;<\/li>\n<li>Telefonie;<\/li>\n<li>Treueprogramme.<\/li>\n<\/ul>\n<p>\nAuf Basis der API hat unser Generaldirektor Askar Rakhimberdiev <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/rhino\/\" class=\"user_link\">rhino<\/a><\/noindex> in vier Stunden einen Telegram-Bot geschrieben, der \u00fcber die API die Best\u00e4nde abruft: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/arahimberdiev\/com-lognex-telegram-moysklad-stock\">github.com\/arahimberdiev\/com-lognex-telegram-moysklad-stock<\/a><\/noindex><\/p>\n<p>Jetzt die nackten Zahlen. <\/p>\n<p>Hier sind unsere Statistiken zur alten REST API:<\/p>\n<ul>\n<li>400 Unternehmen;<\/li>\n<li>600 Benutzer;<\/li>\n<li>2 Millionen Anfragen pro Tag;<\/li>\n<li>200 GB\/Tag ausgehender Verkehr.<\/li>\n<\/ul>\n<p>\nUnd hier ist das Ergebnis f\u00fcr alle APIs von \u041c\u043e\u0439\u0421\u043a\u043b\u0430\u0434:<\/p>\n<ul>\n<li>\u00fcber 70 Integrationen (ein Teil davon kann hier angesehen werden <noindex><a rel=\"nofollow\" href=\"https:\/\/www.moysklad.ru\/integratsii\/\">www.moysklad.ru\/integratsii<\/a><\/noindex>);<\/li>\n<li>8500 Unternehmen;<\/li>\n<li>12.000 Benutzer;<\/li>\n<li>46 Millionen Anfragen pro Tag;<\/li>\n<li>2 TB\/Tag ausgehender Verkehr.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Was kommt als n\u00e4chstes<\/h2>\n<p>\nDie Pl\u00e4ne zur Entwicklung der API befinden sich in aktiver Diskussion. Wir versuchen, die Erfahrungen aus dem Betrieb, die uns die Nutzer zur Verf\u00fcgung stellen, zu ber\u00fccksichtigen. Es gelingt nicht immer, alles sofort umzusetzen, aber eine neue Version der API mit benutzerfreundlicheren Metadaten und einer weniger umfangreichen Struktur ist nicht mehr weit entfernt, einschlie\u00dflich OAuth f\u00fcr die Authentifizierung und einer API f\u00fcr in die Benutzeroberfl\u00e4che integrierte Anwendungen. <\/p>\n<p>Neuigkeiten k\u00f6nnen auf der speziellen Website f\u00fcr Entwickler von Integrationen mit meinem Lager verfolgt werden: <noindex><a rel=\"nofollow\" href=\"https:\/\/dev.moysklad.ru\">dev.moysklad.ru<\/a><\/noindex>.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/moysklad\/blog\/453136\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0435\u0440\u0432\u044b\u0439 API \u041c\u043e\u0435\u0433\u043e\u0421\u043a\u043b\u0430\u0434\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f 10 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434. \u0412\u0441\u0451 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0434 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 API \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0435. \u0410 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0439 API \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u043f\u043e\u0445\u043e\u0440\u043e\u043d\u0438\u0442\u044c. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e: \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 API, \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0443\u0436\u0435\u043d \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u043c\u0443 \u0441\u0435\u0440\u0432\u0438\u0441\u0443, \u0447\u0442\u043e \u0434\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c, \u043d\u0430 \u043a\u0430\u043a\u0438\u0435 \u0433\u0440\u0430\u0431\u043b\u0438 \u043c\u044b \u0443\u0441\u043f\u0435\u043b\u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0438 \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435. \u041c\u0435\u043d\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":25898,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-34354","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0435\u0440\u0432\u044b\u0439 API \u041c\u043e\u0435\u0433\u043e\u0421\u043a\u043b\u0430\u0434\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f 10 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434. \u0412\u0441\u0451 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0434 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 API \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0435. \u0410 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0439 API \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u043f\u043e\u0445\u043e\u0440\u043e\u043d\u0438\u0442\u044c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/pisali-api-porvali-xml-dva\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0438\u0441\u0430\u043b\u0438 API \u2014 \u043f\u043e\u0440\u0432\u0430\u043b\u0438 XML (\u0434\u0432\u0430) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0435\u0440\u0432\u044b\u0439 API \u041c\u043e\u0435\u0433\u043e\u0421\u043a\u043b\u0430\u0434\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f 10 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434. \u0412\u0441\u0451 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0434 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 API \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0435. \u0410 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0439 API \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u043f\u043e\u0445\u043e\u0440\u043e\u043d\u0438\u0442\u044c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/pisali-api-porvali-xml-dva\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:57:51+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:57:51+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Wir haben die API erstellt \u2013 XML (zwei) zerrissen | ProHoster","description":"Die erste API von \u041c\u043e\u0435\u0433\u043e\u0421\u043a\u043b\u0430\u0434\u0430 erschien vor 10 Jahren. Seitdem arbeiten wir an den bestehenden API-Versionen und entwickeln neue. Und einige Versionen der API wurden schon eingestellt.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/pisali-api-porvali-xml-dva","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0438\u0441\u0430\u043b\u0438 API \u2014 \u043f\u043e\u0440\u0432\u0430\u043b\u0438 XML (\u0434\u0432\u0430) | ProHoster","og:description":"\u041f\u0435\u0440\u0432\u044b\u0439 API \u041c\u043e\u0435\u0433\u043e\u0421\u043a\u043b\u0430\u0434\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f 10 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434. \u0412\u0441\u0451 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0434 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 API \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0435. \u0410 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0439 API \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u043f\u043e\u0445\u043e\u0440\u043e\u043d\u0438\u0442\u044c.","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/pisali-api-porvali-xml-dva","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:57:51+00:00","article:modified_time":"2019-10-31T18:57:51+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"34354","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 18:52:24","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:23:17","updated":"2026-01-21 18:52:24","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/34354","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=34354"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/34354\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/25898"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=34354"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=34354"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=34354"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}