[Swift, ein Muss für Jungvögel! ] Lassen Sie uns die Implementierung der Kommunikationsverarbeitung der Web-API verstehen

Die Implementierung, über die Anfänger stolpern, ist im Allgemeinen festgelegt. ** ・ Delegieren ·Schließung ・ Kommunikation · Fehlerbehandlung ·die Architektur** Gibt es nicht viele Anfänger, die hier "?" Und alle sind sehr wichtig für die Entwicklung.

Hier möchte ich den Inhalt so gestalten, dass die Verarbeitung der API-Kommunikation verstanden wird. Ich lasse die Erklärungen weg, die in jedem Artikel geschrieben sind.

Wenn Sie Delegieren verstehen möchten https://qiita.com/Sossiii/items/6c8916f96176991f19aa Ich möchte, dass Sie diesen Artikel lesen. Es war sehr beliebt auf Twitter.

Wir veröffentlichen auch eine Skill Map (Road Map), um unerfahren zu arbeiten. https://qiita.com/Sossiii/items/e2c846d12f2f5db7c426

Schritte für die API-Kommunikation

Schritt 0: Was ist überhaupt eine API?

https://qiita.com/NagaokaKenichi/items/df4c8455ab527aeacf02 Es wird in diesem Artikel ausführlich beschrieben, ist aber für Anfänger schwierig. Um Ihnen beim Lesen dieses Artikels eine ungefähre Vorstellung zu geben Es ist Sache **, ** bestimmte Informationen ** von ** externen ** durch ** Kommunikation ** zu erhalten. Wenn Sie beispielsweise eine App entwickeln, können Sie Ereignisinformationen auf dem Verwaltungsbildschirm ausführen. Es gibt Zeiten, in denen Sie es an die App-Seite senden möchten. Aus diesem Grund können wir die App nicht einzeln aktualisieren. Wenn Sie API-Kommunikation verwenden, "Wenn Ereignisinformationen vorhanden sind, zeigen Sie diese in der App an." Sie können Logik wie implementieren.

Schritt 1: Überprüfen Sie die Datenstruktur, die Sie erhalten

Jetzt haben Sie eine ungefähre Vorstellung von der API Als nächstes werde ich die Vorgehensweise erläutern. Als erstes müssen Sie überprüfen, ** welche Art von Daten gesendet werden **.

Der allgemeine Ablauf der API-Kommunikationsverarbeitung ist ** 1 ・ Wirf eine Anfrage 2. Daten empfangen 3. Ordnen Sie die empfangenen Daten zu 4. Verwenden Sie tatsächlich die zugeordneten Daten ** Aber in der Kartierungsphase Wenn der Datentyp unterschiedlich ist oder die Struktur der Empfangsseite unterschiedlich ist Die Zuordnung schlägt fehl. Überprüfen Sie daher zunächst **, welche Art von Daten gesendet werden **.

Die einzige Möglichkeit zur Überprüfung besteht darin, nach der URL zu suchen. https://covid19-japan-web-api.now.sh/api//v1/prefectures Zum Beispiel unter dieser URL, die den Infektionsstatus des Corona-Virus veröffentlicht Lassen Sie uns darauf zugreifen. スクリーンショット 2020-11-06 11.19.37.png

Was Sie hier überprüfen müssen, ist "Schlüssel", "Wert und sein Typ" und "Datenstruktur". Der Schlüssel entspricht id, name_ja, name_en usw. im Bild. Wert entspricht 1 (Int), "Hokkaido" (String), "Hokkaido" (String) Die Datenstruktur ist hierarchisch {} oder Array [].

Ich weiß nicht, warum ich diese überprüfen muss, ohne sie auszugeben Ah, bitte lesen Sie weiter, um zu sehen, ob es so etwas gibt.

Schritt 2: Bereiten Sie das Mapping vor und schreiben Sie das Modell

Sobald Sie die gesendete Datenstruktur verstanden haben, können Sie sie zuordnen. Ich werde den Code schreiben. Aus den im Mapping gesendeten Daten Extrahieren Sie die Daten, die Sie verwenden möchten, und stellen Sie sie in der Sprache des Benutzers zur Verfügung.

https://covid19-japan-web-api.now.sh/api//v1/prefectures Betrachten Sie den Fall der Verwendung von id, name_ja, pcr aus den gesendeten Daten. In diesem Fall ist der Schlüssel, der Wert und die Struktur des Teils, den Sie kennen möchten, wie folgt.

[ 
  { 
    id:1
    name_ja: "Hokkaido",
    ...
    pcr: 85892,
  },
  { 
    id:2
    name_ja: "Aomori",
    ...
    pcr: 5350,
  },
...
]

Schreiben wir nun ein Modell für die eigentliche Zuordnung. Nach dem Öffnen von Xcode erstellen wir eine neue Datei. Der Dateiname lautet Covid.swift.

//Covid.swift file
struct CovidInfo: Codable {
  let id: Int
  let nameJa: String
  let pcr: Int
  //Konvertieren von Variablen mit zwei oder mehr Wörtern in Schlangenfälle mit CodingKey
  //Der Schlangenfall wird beim Mapping angewendet
  enum CodingKeys: String, CodingKey {
    case nameJa = "name_ja"
  }
}

Grundsätzlich sind Variablen- / Konstantennamen Kleinbuchstaben (https://wa3.i-3-i.info/word13956.html). Ich habe es wie oben geschrieben (nameJa), weil ich es schreiben muss Die zurückgegebenen JSON-Daten sind ** name_ja **, nicht wahr?

Wenn beim Zuordnen die Schreibmethode hier anders ist, schlägt sie fehl Sie müssen es die gleiche Form machen. ** Coding Key ** spielt dort eine aktive Rolle. enum CodingKey: String, CodingKey {} Sie stimmen überein mit.

Nachdem die Untertasse für das Mapping fertig ist, Im nächsten Schritt werden wir tatsächlich eine Anfrage stellen.

Schritt 3: Erstellen Sie eine Funktion, um eine Anfrage zu stellen

Erstellen Sie für die API-Verarbeitung eine neue API-Datei und machen Sie sie allgemein. Nennen wir es API.swift. Ich möchte eine Bibliothek wie Alamofire oder Moya verwenden. Für diejenigen, die gerade erst anfangen, werden wir fortfahren, ohne die Bibliothek hier zu benutzen.

struct CovidAPI {
    static func getPrefectures(completion: @escaping ([CovidInfo]) -> Void) {
        let url = URL(string: "https://covid19-japan-web-api.now.sh/api//v1/prefectures")
        let request = URLRequest(url: url!)
        URLSession.shared.dataTask(with: request) { (data, response, error) in
            
            if let data = data {
                let result = try! JSONDecoder().decode([CovidInfo].self, from: data)
                completion(result)
            }
        }.resume()
    }
}

Ich werde in der Reihenfolge von oben erklären.

static func getPrefectures(completion: @escaping ([CovidInfo]) -> Void)
//Zu CovidInfo[]Wird beim Überprüfen der Datenstruktur in Schritt 1 angehängt[ ]Wurde angehängt(War in einem Array)
//Weil. Da mehrere Daten fliegen, werde ich sie zu einem Array in der Anrufverarbeitung machen.
//Durch Hinzufügen von Static müssen Sie die Covid-API nicht von außen instanziieren
//Ich versuche es zu nennen.
//Wenn es statisch ist
CovidAPI.getPrefectures()
//Wenn es keine statische Aufladung gibt
CovidAPI().getPrefectures()
//Ich benutze einen Abschluss als Argument.
//Die Daten in der Funktion können standardmäßig nicht nach außen übertragen werden.
//@Dies ist durch Hinzufügen von Escape möglich.
URLSession.shared.dataTask(with: request) { (data, response, error) in
            if let data = data {
                let result = try! JSONDecoder().decode([CovidInfo].self, from: data)
                completion(result)
            }
        }.resume()
//Ich habe tatsächlich eine Anfrage in der URLSession-Zeile gestellt{()}Im Inneren ist die Antwort.
//Da Daten die gewünschten Daten sind, nur, wenn Daten in der if let-Anweisung zurückgegeben werden
//Sie ordnen zu.
//Ordnen Sie die Daten dem CovidInfo-Typ zu(Kartierung)Ordnen Sie das konstante Ergebnis zu
//Zur Fertigstellung übergeben.(Rückgabe von Daten an den Anrufer)

Schritt 4: Versuchen Sie anzurufen

Nachdem Sie die API-Kommunikation verwenden können, rufen Sie sie vom View Controller aus auf.

//ViewController.swift
CovidAPI.getPrefectures(completion: {(result: [CovidInfo]) -> Void in
    DispatchQueue.main.async {
        idLabel.text = "\(result.id)"
        nameLabel.text = "\(result.nameJa)"
        pcrLabel.text = "\(result.pcr)"
    }
})

Bereiten Sie für idLabel, nameLabel, pcrLabel UILabel () selbst vor und platzieren Sie es auf dem Bildschirm. Sobald die Daten wiedergegeben sind, sind die Schritte in diesem Artikel abgeschlossen.

abschließend

Haben Sie den Verarbeitungsfluss rund um die Kommunikation verstanden? ** 1 ・ Wirf eine Anfrage 2. Daten empfangen 3. Ordnen Sie die empfangenen Daten zu 4. Verwenden Sie tatsächlich die zugeordneten Daten ** Ich werde es im Fluss von tun, aber für die Abbildung von 3 ** 1 ・ Überprüfen Sie die zurückgegebenen Daten (Datenname und Datenstruktur) 2. Entscheiden Sie, welche Daten Sie erhalten möchten, und bereiten Sie eine Untertasse (Typ) vor ** Es sind zwei Schritte erforderlich. Die Kommunikationsverarbeitung schlägt fehl, nur weil der Untertassentyp und der Variablenname unterschiedlich sind. Es ist keine Übertreibung zu sagen, dass die beiden Schritte hier die wichtigsten sind.

Es ist eine der Implementierungen, bei denen das junge Kind schwieriger ist, daher hoffe ich, dass es so hilfreich wie möglich ist.

Recommended Posts

[Swift, ein Muss für Jungvögel! ] Lassen Sie uns die Implementierung der Kommunikationsverarbeitung der Web-API verstehen
Ein grundlegendes Verständnis des Flusses der rekursiven Verarbeitung anstreben
Lassen Sie uns etwas tiefer in die Stream-API eintauchen, von der ich verstehe, dass sie neu geschrieben wurde.
[Swift / Beginner] Schreiben wir die Funktionen rund um die Kommunikation in eine separate Datei
Implementierung der asynchronen Verarbeitung für einen einzelnen Mandanten in Tomcat
[Für Anfänger] Verstehen Sie schnell die Grundlagen von Java 8 Lambda
[Swift] Das ist die Lösung! Abbildung der Implementierung des Delegierten
Werfen wir einen Blick auf den Bildschirm von Quant Analyzer!
Versuchen wir die Implementierung, um den Bereich des Dreiecks zu finden, den wir im Training für Neuankömmlinge durchgeführt haben