Heim  >  Artikel  >  PHP-Framework  >  Backend-Entwicklung: So schreiben Sie zuverlässige Schnittstellen

Backend-Entwicklung: So schreiben Sie zuverlässige Schnittstellen

步履不停
步履不停Original
2019-06-26 18:19:472830Durchsuche

Backend-Entwicklung: So schreiben Sie zuverlässige Schnittstellen

Es ist fast ein Jahr her, seit ich meinen Abschluss gemacht habe und in mein jetziges Unternehmen eingetreten bin, und ich habe mich umfassend an der Entwicklung und dem Start von zwei Phasen der neuen Projekte der Abteilung beteiligt. Endentwickler, das Schmerzlichste ist vor und nach dem Start, wenn ich mit allen möglichen plötzlichen und unerklärlichen Fehlern konfrontiert werde, da ich so oft Änderungen vornehme führt zu Tragödien wie der experimentellen Fehlerkorrektur, und nach der Korrektur eines Fehlers treten zwei Fehler auf. Ich frage mich, warum es vor jedem Start so viele Fehler gibt.

Ich habe vor ein paar Tagen einen Douban-Artikel gelesen, der nicht zusammengefasst ist, sondern nur Erfahrung. Programmierer können nicht einfach Code schreiben, wenn das Geschäft kommt, und Fehler beheben, wenn es Fehler gibt. Das macht es schwierig, die Technologie zu verbessern, daher ist es kein Wunder, dass es jedes Mal so viele Fehler gibt. Einige Entwickler arbeiten schon seit vielen Jahren, aber die Anzahl der Schnittstellen beträgt von Zeit zu Zeit immer noch 500. Sie sind damit beschäftigt, in der frühen Phase Code zu schreiben und in der späteren Phase Fehler zu beheben, was sie müde macht.

Von der ersten Phase an habe ich mich mit dem Geschäft und dem Framework vertraut gemacht und Edge-Schnittstellen geschrieben. In der zweiten Phase war ich für ein kleines Modul verantwortlich und habe versucht, Datenbanken und Programme zu entwerfen Gestern ging es reibungslos online, also habe ich versucht, einige Erfahrungen zusammenzufassen, aber es könnte mir und den Lesern etwas Inspiration geben. (Dieser Artikel befasst sich nur mit grundlegenden Fehlern und einfachen Fehlern und geht nicht auf komplexe Probleme wie hohe Parallelität und große Datenmengen ein.)

1. Warum sind Schnittstellen fehlerhaft?

Die Benutzeroberfläche, an deren Entwicklung ich so hart gearbeitet habe, hat gut funktioniert, als ich sie selbst getestet habe, aber warum ging es schief, sobald jemand anderes sie angepasst hat? ? (Hier sollte es Emoticons geben, bitte entscheiden Sie sich selbst.) Natürlich kann es ein Problem mit der Betriebsumgebung sein, aber das Programm wird einheitlich auf dem Server bereitgestellt. Dies liegt im Allgemeinen in der Verantwortung des Architekten oder des Betriebs und der Wartung Was das Problem der Programmiersprache oder des Betriebssystems betrifft, so liegen sie alle außerhalb des Betrachtungsbereichs. Heute berücksichtigen wir nur Fehler, die von uns selbst geschrieben wurden.

Tatsächlich umfasst ein laufendes Programm nichts weiter als drei Dinge: Ressourcen (CPU, Speicher usw.) + Algorithmus (Programmausführungsprozess) + Daten (Benutzereingabe, Datenbank, Schnittstelle von Drittanbietern usw.). ). Normalerweise gehen wir davon aus, dass Ressourcen zuverlässig sind und Fehler hauptsächlich aufgrund unzuverlässiger Algorithmen oder Datenanomalien auftreten.

Außerdem führt die Maschine Anweisungen streng nach 0/1 aus. Der Algorithmus wurde beim letzten Mal normal ausgeführt. Dies liegt im Wesentlichen daran, dass sich die Daten geändert haben und der Algorithmus diese Situation nicht abdecken konnte. Um die Stabilität der Schnittstelle sicherzustellen, berücksichtigen wir daher hauptsächlich zwei Aspekte: Gewährleistung der Zuverlässigkeit der Daten und der Robustheit des Algorithmus Die Robustheit des Algorithmus ist zu berücksichtigen. In allen Datensituationen sind die beiden untrennbar miteinander verbunden.

2. Wie schreibe ich eine Schnittstelle mit weniger Fehlern?

Wie zuvor analysiert, sind Datenänderungen die häufigste und wichtigste Ursache für Schnittstellenfehler. Unter diesen sind Benutzereingaben der Hauptgrund für Datenänderungen. Das Programm muss über Benutzereingaben verfügen, sonst ist es bedeutungslos.

In der Programmierwelt gibt es ein berühmtes Sprichwort: Vertraue niemals Benutzereingaben. Man weiß nie, was der Benutzer in ein Eingabefeld eingeben wird, das einen Namen erwartet. Seien Sie nicht versichert, nur weil das Front-End es gefiltert hat. Einerseits können Benutzer Crawler und andere Mittel verwenden, um direkt auf Ihre Benutzeroberfläche zuzugreifen. Andererseits ist das Front-End auch Ihr Benutzer, und das gibt es auch Auch Kommunikationsfehler können auftreten, wenn das Frontend Sie auf die falsche Art und Weise anspricht.

Der erste Vorschlag: Überprüfen Sie Benutzereingaben streng, einschließlich Format und Inhalt.

Ich weiß, dass viele Leute zu faul sind, die Benutzereingaben einzeln zu überprüfen, weil sie denken, dass die Funktion in Ordnung ist, solange sie normal ist. Dies führt jedoch oft zu mehr Erfahrung bei der Korrektur Bugs später. Häufig werden beim Testen Fehler gemeldet, und dann stellen Sie fest, dass das Frontend die falschen Parameter übergeben hat oder die Benutzereingaben nicht sinnvoll eingeschränkt hat. Aber dieser Vorgang hat bereits viel Zeit und Energie verschwendet. Es ist besser, ihn zu Beginn selbst zu überprüfen und entsprechende Fehlermeldungen zurückzugeben, was Ihnen später viel Energie spart.

Dies gilt insbesondere für dynamische Sprachen wie PHP. Wenn wir beispielsweise das Laravel-Framework verwenden, verwende ich zunächst $request->validate() an allen Schnittstelleneingängen, um das Format zu überprüfen Bei Bedarf wird auch Code geschrieben, um den Eingabeinhalt weiter zu überprüfen, z. B. den Zeitbereich, ob die angeforderten Daten gültig sind usw.

Der zweite Vorschlag: Berücksichtigen Sie die mühsamen Vorgänge des Benutzers, wiederholte Übermittlungen und verzögerte Übermittlungen

Wiederholte Übermittlungen sollten eine Situation sein, an die die meisten Backends denken können, und das ist es auch Idempotenz der Schnittstelle. Einige Ressourcen können nur einmal bedient werden und müssen überprüft werden. Tatsächlich handelt es sich nicht nur um wiederholte Übermittlungen, sondern auch um die Situation, in der dasselbe Ereignis wiederholt von zwei Personen verarbeitet wird.

Was die verzögerte Übermittlung betrifft, handelte es sich tatsächlich um ein Problemmuster, das mir erst klar wurde, nachdem mir der Tester einen Fehler gemeldet hatte. Wenn wir beispielsweise eine bestimmte Ressource über die Get-Schnittstelle an den Benutzer zurückgeben, kann der Benutzer die Ressourcen-ID über die Post-Schnittstelle zurückgeben und Änderungen übermitteln. Da sie von seiner eigenen Get-Schnittstelle zurückgegeben wird, möchten wir möglicherweise nur überprüfen, ob die Die ID ist zulässig und scheint eine strikte geschlossene Schleife zu bilden. Wenn der Benutzer jedoch auf dieser Seite bleibt und die Übermittlung verzögert, ist die Ressource möglicherweise während dieses Zeitraums abgelaufen oder die Ressource wurde von anderen geändert und der Benutzer hat die Änderung erfolgreich durchgeführt der Fehler. Wenn Sie genauer darüber nachdenken, werden Sie feststellen, dass dies einem Ressourcenausfall in Szenarien mit hoher Parallelität ähnelt.

Der dritte Vorschlag: Überprüfen Sie die Rückgabedaten der Datenbank und der Drittanbieterschnittstelle

Zu den gängigen Datenquellen gehören neben Benutzereingaben auch Datenbanken und Schnittstellen von Drittanbietern. Relativ gesehen werden diese Datenschnittstellen viel zuverlässiger sein und das Inhaltsformat wird stärker standardisiert. Für die Stabilität der Schnittstelle ist es jedoch am besten, einige Tests durchzuführen. Wenn die Daten beispielsweise häufig leer sind, muss die Programmausführung umgehend beendet und entsprechende Informationen verworfen werden.

Bei der Datenbank bin ich übrigens auch auf Fehler gestoßen, bei denen es sich um Datenaktualisierungsprobleme handelt, die durch Master-Slave-Verzögerungen verursacht werden. Aufgrund meiner mangelnden Erfahrung bin ich in dieser Art von Problemen nicht sehr gut. deshalb werde ich nicht mehr darüber schreiben.

Der vierte Vorschlag: Der Programmalgorithmus deckt abnormale Situationen so weit wie möglich ab.

Dies ist eigentlich eine Ergänzung zu den ersten drei Brechen Sie das Programm direkt ab und geben Sie eine Fehlermeldung zurück. In einigen Situationen muss das Programm jedoch möglicherweise weiter ausgeführt werden. In diesen Situationen sollten Sie versuchen, sie zu Beginn des Programmentwurfs sorgfältig zu berücksichtigen Es gibt weniger Fehler und es wird einfacher zu warten sein.

3. Wie man eine effizientere Schnittstelle schreibt

Lassen Sie uns abschließend noch ein paar Gedanken zur Schnittstelleneffizienz und Codequalität schreiben.

1. Der Hauptfaktor, der die Schnittstelleneffizienz beeinflusst, ist der Datenbankbetrieb.
Nach meiner begrenzten Erfahrung ist die lange Schnittstellenzeit im Wesentlichen auf unangemessene Datenbankoperationen zurückzuführen hat keine Leistungsprobleme. Ich habe viel Code gesehen, der die Datenbank in einer for-Schleife abfragt. Dies muss vermieden werden. Wir können zuerst alle Daten auf einmal herausnehmen und sie dann einzeln verarbeiten. Beispielsweise zeichnen wir alle Datenbankoperationen auf der Framework-Ebene auf. Beim Debuggen der Schnittstelle können wir alle Datenbankoperationen und den entsprechenden Zeitverbrauch sehen, die zusammengeführt werden müssen, und die optimierten zeitaufwändigen Abfragen sollten entsprechend optimiert werden .

2. Sinnvolle Verwendung von Exception, log

Aus historischen Gründen habe ich viele Codes gesehen, die zum Abbruch auf Return angewiesen sind Das Programm und die Übergabe von Fehlerinformationen machen die Wartung äußerst schwierig, wenn der Code komplex und die Aufrufebene tief ist, und es ist weitaus weniger intuitiv und bequem als der Ausnahmemechanismus. Außerdem müssen wichtige Informationen in ein Protokoll geschrieben werden, um die spätere Problemerkennung und Fehlerbehebung zu erleichtern, und sie können auch zum Beweis der Unschuld verwendet werden.

3. Der Code sollte angemessen unterteilt und abstrahiert werden.

Wiederholte Funktionen sollten unabhängig sein. Sie sollten die Anforderungen angemessen berücksichtigen Änderungen und Erweiterungen; schreiben Sie kleine Funktionen. Implementieren Sie komplexe Funktionen nicht auf einmal. Der auf diese Weise geschriebene Code ist einfach zu ändern, zu testen und zu erweitern. Ich bin auch nicht gut darin. Nachdem ich online gegangen bin, ist mein Code völlig chaotisch und schwer zu warten. Als nächstes muss ich mehr nachdenken und mehr üben.

4. Fazit

Ich hoffe, dass jeder Code fehlerfrei ist!

Weitere technische Artikel zu Laravel finden Sie in der Spalte Laravel-Tutorial, um mehr darüber zu erfahren!

Das obige ist der detaillierte Inhalt vonBackend-Entwicklung: So schreiben Sie zuverlässige Schnittstellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn