Heim Web-Frontend js-Tutorial So verwenden Sie JSONAPI in PHP

So verwenden Sie JSONAPI in PHP

Apr 13, 2018 pm 04:03 PM
javascript 使用方法

Dieses Mal erkläre ich Ihnen, wie Sie JSONAPI in PHP verwenden. Was sind die Vorsichtsmaßnahmen bei der Verwendung von JSONAPI in PHP? Hier sind praktische Fälle.

Jetzt besteht die Hauptaufgabe von Serverprogrammierern nicht mehr darin, Vorlagen festzulegen, sondern JSON-basierte APIs zu schreiben Schnittstelle. Leider hat jeder sehr unterschiedliche Schreibstile, was eine Menge unnötiger Kommunikationskosten bei der Systemintegration mit sich bringt. Wenn Sie ähnliche Probleme haben, sollten Sie auch auf JSONAPI achten Es handelt sich um einen Spezifikationsstandard zum Erstellen von APIs auf Basis von JSON. Eine einfache API-Schnittstelle sieht ungefähr wie folgt aus:

JSONAPI

Eine kurze Erklärung: Die Daten im Stammknoten werden verwendet, um den Inhalt des Hauptobjekts zu platzieren, wo Typ und ID sind Es ist ein Pflichtfeld und dient zur Darstellung des Typs und der Identität des Hauptobjekts. Alle anderen einfachen Attribute werden in Attributen platziert Wenn das Hauptobjekt Eins-zu-Eins-, Eins-zu-Viele- und andere verwandte Objekte hat, wird es in Beziehungen platziert, jedoch nur über Typ und ID Ein Link wird in das Feld eingefügt und der tatsächliche Inhalt des zugehörigen Objekts wird in included im Stammkontakt platziert.

Mit JSONAPI wird der Datenanalyseprozess standardisiert, wodurch unnötige Kommunikationskosten eingespart werden. Allerdings ist es immer noch sehr mühsam, JSONAPI-Daten manuell zu erstellen. Glücklicherweise kann der Implementierungsprozess mit Fractal relativ automatisiert werden. Wenn das obige Beispiel mit Fractal implementiert wird, sieht es wahrscheinlich so aus:

<?php
use League\Fractal\Manager;
use League\Fractal\Resource\Collection;
$articles = [
  [
    &#39;id&#39; => 1,
    'title' => 'JSON API paints my bikeshed!',
    'body' => 'The shortest article. Ever.',
    'author' => [
      'id' => 42,
      'name' => 'John',
    ],
  ],
];
$manager = new Manager();
$resource = new Collection($articles, new ArticleTransformer());
$manager->parseIncludes('author');
$manager->createData($resource)->toArray();
?>
Nach dem Login kopieren

Wenn ich mein Lieblings-PHP-Toolkit auswählen müsste, wäre Fractal definitiv auf der Liste. Es verbirgt die Implementierungsdetails, sodass Benutzer JSONAPI überhaupt nicht kennen müssen. Die Vereinbarung kann beginnen. Wenn Sie es jedoch in Ihrem eigenen Projekt verwenden möchten, können Sie Fractalistic ausprobieren, anstatt Fractal direkt zu verwenden, was für Fractal besser geeignet ist Zur einfacheren Verwendung eingekapselt:

<?php
Fractal::create()
  ->collection($articles)
  ->transformWith(new ArticleTransformer())
  ->includeAuthor()
  ->toArray();
?>
Nach dem Login kopieren

Wenn Sie PHP nackt schreiben, ist Fractalistic im Grunde die beste Wahl, wenn Sie jedoch ein Full-Stack-Framework verwenden Fractalistic ist möglicherweise nicht elegant genug, da es nicht perfekter in die vorhandenen Funktionen des Frameworks selbst integriert werden kann. Am Beispiel von Lavaral verfügt es über eine integrierte API Ressourcenfunktion, darauf basierend habe ich einen JsonApiSerializer implementiert, der sich perfekt in das Framework integrieren lässt. Der Code lautet wie folgt:

<?php
namespace App\Http\Serializers;
use Illuminate\Http\Resources\MissingValue;
use Illuminate\Http\Resources\Json\Resource;
use Illuminate\Http\Resources\Json\ResourceCollection;
use Illuminate\Pagination\AbstractPaginator;
class JsonApiSerializer implements \JsonSerializable
{
  protected $resource;
  protected $resourceValue;
  protected $data = [];
  protected static $included = [];
  public function construct($resource, $resourceValue)
  {
    $this->resource = $resource;
    $this->resourceValue = $resourceValue;
  }
  public function jsonSerialize()
  {
    foreach ($this->resourceValue as $key => $value) {
      if ($value instanceof Resource) {
        $this->serializeResource($key, $value);
      } else {
        $this->serializeNonResource($key, $value);
      }
    }
    if (!$this->isRootResource()) {
      return $this->data;
    }
    $result = [
      'data' => $this->data,
    ];
    if (static::$included) {
      $result['included'] = static::$included;
    }
    if (!$this->resource->resource instanceof AbstractPaginator) {
      return $result;
    }
    $paginated = $this->resource->resource->toArray();
    $result['links'] = $this->links($paginated);
    $result['meta'] = $this->meta($paginated);
    return $result;
  }
  protected function serializeResource($key, $value, $type = null)
  {
    if ($type === null) {
      $type = $key;
    }
    if ($value->resource instanceof MissingValue) {
      return;
    }
    if ($value instanceof ResourceCollection) {
      foreach ($value as $k => $v) {
        $this->serializeResource($k, $v, $type);
      }
    } elseif (is_string($type)) {
      $included = $value->resolve();
      $data = [
        'type' => $included['type'],
        'id' => $included['id'],
      ];
      if (is_int($key)) {
        $this->data['relationships'][$type]['data'][] = $data;
      } else {
        $this->data['relationships'][$type]['data'] = $data;
      }
      static::$included[] = $included;
    } else {
      $this->data[] = $value->resolve();
    }
  }
  protected function serializeNonResource($key, $value)
  {
    switch ($key) {
      case 'id':
        $value = (string)$value;
      case 'type':
      case 'links':
        $this->data[$key] = $value;
        break;
      default:
        $this->data['attributes'][$key] = $value;
    }
  }
  protected function links($paginated)
  {
    return [
      'first' => $paginated['first_page_url'] ?? null,
      'last' => $paginated['last_page_url'] ?? null,
      'prev' => $paginated['prev_page_url'] ?? null,
      'next' => $paginated['next_page_url'] ?? null,
    ];
  }
  protected function meta($paginated)
  {
    return [
      'current_page' => $paginated['current_page'] ?? null,
      'from' => $paginated['from'] ?? null,
      'last_page' => $paginated['last_page'] ?? null,
      'per_page' => $paginated['per_page'] ?? null,
      'to' => $paginated['to'] ?? null,
      'total' => $paginated['total'] ?? null,
    ];
  }
  protected function isRootResource()
  {
    return isset($this->resource->isRoot) && $this->resource->isRoot;
  }
}
?>
Nach dem Login kopieren

Die entsprechende Ressource ist grundsätzlich dieselbe wie zuvor, außer dass der Rückgabewert geändert wurde:

<?php
namespace App\Http\Resources;
use App\Article;
use Illuminate\Http\Resources\Json\Resource;
use App\Http\Serializers\JsonApiSerializer;
class ArticleResource extends Resource
{
  public function toArray($request)
  {
    $value = [
      &#39;type&#39; => 'articles',
      'id' => $this->id,
      'name' => $this->name,
      'author' => $this->whenLoaded('author'),
    ];
    return new JsonApiSerializer($this, $value);
  }
}
?>
Nach dem Login kopieren

Der entsprechende Controller ist fast derselbe wie zuvor, außer dass ein isRoot-Attribut hinzugefügt wurde, um den Stamm zu identifizieren:

<?php
namespace App\Http\Controllers;
use App\Article;
use App\Http\Resources\ArticleResource;
class ArticleController extends Controller
{
  protected $article;
  public function construct(Article $article)
  {
    $this->article = $article;
  }
  public function show($id)
  {
    $article = $this->article->with('author')->findOrFail($id);
    $resource = new ArticleResource($article);
    $resource->isRoot = true;
    return $resource;
  }
}
?>
Nach dem Login kopieren

Der gesamte Prozess greift nicht zu sehr in die Architektur von Laravel ein. Man kann sagen, dass Laravel derzeit implementiert JSONAPI Die beste Lösung. Wenn Sie interessiert sind, können Sie JsonApiSerializer studieren. Obwohl nur mehr als hundert Zeilen Code implementiert werden müssen, habe ich viel Mühe darauf verwendet, dies zu erreichen. Man kann sagen, dass jeder Schritt auf dem Weg harte Arbeit ist.                                        

Ich glaube, dass Sie die Methode zum Lesen dieses Artikels beherrschen. Weitere spannende Artikel finden Sie auf der chinesischen PHP-Website.

Empfohlene Lektüre:

So beschleunigen und optimieren Sie Vue-CLI-Code

Vue.js universelles Anwendungsframework Nuxt .js Verwenden Sie eine ausführliche Erklärung

JS zum Implementieren der Beschriftungs-Scroll-Umschaltung

Das obige ist der detaillierte Inhalt vonSo verwenden Sie JSONAPI in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie verwende ich das DirectX-Reparaturtool? Detaillierte Verwendung des DirectX-Reparaturtools Wie verwende ich das DirectX-Reparaturtool? Detaillierte Verwendung des DirectX-Reparaturtools Mar 15, 2024 am 08:31 AM

Das DirectX-Reparaturtool ist ein professionelles Systemtool. Seine Hauptfunktion besteht darin, den DirectX-Status des aktuellen Systems zu erkennen. Möglicherweise wissen viele Benutzer nicht, wie man das DirectX-Reparaturtool verwendet. Schauen wir uns das ausführliche Tutorial unten an. 1. Verwenden Sie die Reparaturtool-Software, um die Reparaturerkennung durchzuführen. 2. Wenn nach Abschluss der Reparatur angezeigt wird, dass ein ungewöhnliches Problem in der C++-Komponente vorliegt, klicken Sie bitte auf die Schaltfläche „Abbrechen“ und dann auf die Menüleiste „Extras“. 3. Klicken Sie auf die Schaltfläche „Optionen“, wählen Sie die Erweiterung aus und klicken Sie auf die Schaltfläche „Erweiterung starten“. 4. Nachdem die Erweiterung abgeschlossen ist, erkennen und reparieren Sie sie erneut. 5. Wenn das Problem nach Abschluss des Reparaturtoolvorgangs immer noch nicht behoben ist, können Sie versuchen, das Programm, das den Fehler gemeldet hat, zu deinstallieren und erneut zu installieren.

Einführung in den HTTP 525-Statuscode: Erkunden Sie seine Definition und Anwendung Einführung in den HTTP 525-Statuscode: Erkunden Sie seine Definition und Anwendung Feb 18, 2024 pm 10:12 PM

Einführung in den HTTP 525-Statuscode: Verstehen Sie seine Definition und Verwendung. Der HTTP (HypertextTransferProtocol) 525-Statuscode bedeutet, dass der Server während des SSL-Handshake-Prozesses einen Fehler hat, was dazu führt, dass keine sichere Verbindung hergestellt werden kann. Der Server gibt diesen Statuscode zurück, wenn beim Transport Layer Security (TLS)-Handshake ein Fehler auftritt. Dieser Statuscode fällt in die Kategorie „Serverfehler“ und weist normalerweise auf ein Serverkonfigurations- oder Einrichtungsproblem hin. Wenn der Client versucht, über HTTPS eine Verbindung zum Server herzustellen, hat der Server keine Verbindung

So verwenden Sie Baidu Netdisk – So verwenden Sie Baidu Netdisk So verwenden Sie Baidu Netdisk – So verwenden Sie Baidu Netdisk Mar 04, 2024 pm 09:28 PM

Viele Freunde wissen immer noch nicht, wie man Baidu Netdisk verwendet, daher wird der Herausgeber unten erklären, wie man Baidu Netdisk verwendet. Wenn Sie es brauchen, schauen Sie es sich meiner Meinung nach an. Schritt 1: Melden Sie sich direkt nach der Installation von Baidu Netdisk an (wie im Bild gezeigt); Schritt 2: Wählen Sie dann „Meine Freigabe“ und „Übertragungsliste“ gemäß den Seitenaufforderungen (wie im Bild gezeigt); Friend Sharing“ können Sie Bilder und Dateien direkt mit Freunden teilen (wie im Bild gezeigt); Schritt 4: Wählen Sie dann „Teilen“ und wählen Sie dann Computerdateien oder Netzwerkfestplattendateien aus (wie im Bild gezeigt); Fünfter Schritt 1: Dann können Sie Freunde finden (wie im Bild gezeigt); Schritt 6: Die benötigten Funktionen finden Sie auch in der „Funktionsschatzkiste“ (wie im Bild gezeigt). Das Obige ist die Meinung des Herausgebers

Lernen Sie, schnell zu kopieren und einzufügen Lernen Sie, schnell zu kopieren und einzufügen Feb 18, 2024 pm 03:25 PM

So verwenden Sie die Tastenkombinationen zum Kopieren und Einfügen. Kopieren und Einfügen ist ein Vorgang, auf den wir bei der täglichen Verwendung von Computern häufig stoßen. Um die Arbeitseffizienz zu verbessern, ist es sehr wichtig, die Tastenkombinationen zum Kopieren und Einfügen zu beherrschen. In diesem Artikel werden einige häufig verwendete Tastenkombinationen zum Kopieren und Einfügen vorgestellt, um den Lesern dabei zu helfen, Kopier- und Einfügevorgänge bequemer durchzuführen. Tastenkombination zum Kopieren: Strg+Strg+C ist die Tastenkombination zum Kopieren. Durch Gedrückthalten der Strg-Taste und anschließendes Drücken der C-Taste können Sie den ausgewählten Text, die Dateien, Bilder usw. in die Zwischenablage kopieren. Um diese Tastenkombination zu verwenden,

So verwenden Sie Potplayer – So verwenden Sie Potplayer So verwenden Sie Potplayer – So verwenden Sie Potplayer Mar 04, 2024 pm 06:10 PM

Potplayer ist ein sehr leistungsfähiger Mediaplayer, aber viele Freunde wissen immer noch nicht, wie man Potplayer verwendet. Heute werde ich die Verwendung von Potplayer im Detail vorstellen und hoffe, allen zu helfen. 1. PotPlayer-Tastenkombinationen Die standardmäßigen Tastenkombinationen für den PotPlayer-Player sind wie folgt: (1) Wiedergabe/Pause: Leertaste (2) Lautstärke: Mausrad, Pfeiltasten nach oben und unten (3) Vorwärts/Rückwärts: Pfeil nach links und rechts Tasten (4) Lesezeichen: P- Lesezeichen hinzufügen, H-View-Lesezeichen (5) Vollbild/Wiederherstellen: Eingabe (6) Geschwindigkeit: C-Beschleunigung, 7) Vorheriges/nächstes Bild: D/

Mar 18, 2024 am 11:07 AM

Das KMS Activation Tool ist ein Softwaretool zur Aktivierung von Microsoft Windows- und Office-Produkten. KMS ist die Abkürzung für KeyManagementService, einen Schlüsselverwaltungsdienst. Das KMS-Aktivierungstool simuliert die Funktionen des KMS-Servers, sodass der Computer eine Verbindung zum virtuellen KMS-Server herstellen kann, um Windows- und Office-Produkte zu aktivieren. Das KMS-Aktivierungstool ist klein und leistungsstark und kann mit einem Klick dauerhaft aktiviert werden. Es kann jede Version des Windows-Systems und jede Version der Office-Software aktivieren, ohne dass eine Verbindung zum Internet besteht und häufig aktualisiertes Windows-Aktivierungstool. Heute werde ich es Ihnen vorstellen. Lassen Sie mich Ihnen die kms-Aktivierungsarbeit vorstellen

So verbinden Sie Zellen mithilfe von Tastenkombinationen So verbinden Sie Zellen mithilfe von Tastenkombinationen Feb 26, 2024 am 10:27 AM

So verwenden Sie die Tastenkombinationen zum Zusammenführen von Zellen In der täglichen Arbeit müssen wir häufig Tabellen bearbeiten und formatieren. Das Zusammenführen von Zellen ist ein gängiger Vorgang, mit dem mehrere benachbarte Zellen zu einer Zelle zusammengeführt werden können, um die Schönheit der Tabelle und den Effekt der Informationsanzeige zu verbessern. In gängigen Tabellenkalkulationsprogrammen wie Microsoft Excel und Google Sheets ist das Zusammenführen von Zellen sehr einfach und kann über Tastenkombinationen erfolgen. Im Folgenden wird die Verwendung von Tastenkombinationen zum Zusammenführen von Zellen in diesen beiden Programmen vorgestellt. existieren

Was ist PyCharm? Funktionseinführung und detaillierte Erklärung der Verwendung Was ist PyCharm? Funktionseinführung und detaillierte Erklärung der Verwendung Feb 20, 2024 am 09:21 AM

PyCharm ist eine professionelle integrierte Python-Entwicklungsumgebung (IDE), die von JetBrains entwickelt wurde. Sie bietet Python-Entwicklern leistungsstarke Funktionen und Tools, die das Schreiben von Python-Code effizienter und bequemer machen. PyCharm unterstützt mehrere Betriebssysteme, darunter Windows, macOS und Linux, sowie mehrere Python-Versionen und bietet zahlreiche Plug-Ins und Erweiterungsfunktionen, um Entwicklern die Anpassung der IDE-Umgebung an ihre eigenen Bedürfnisse zu erleichtern. P

See all articles