WP REST API Hämtar data

I de tidigare delarna av serien har vi tittat på vad WP REST API är och hur det kan hjälpa oss att bygga bättre applikationer med hjälp av WordPress back-end. 

Sedan tittade vi på två sätt att konfigurera autentisering på servern för att generera autentiserade förfrågningar. Den första är den grundläggande autentiseringsmetoden, som är användbar i utvecklingsmiljöer och möjliggör snabb prototyper, eftersom det inte kräver mycket tid att installera. Den andra metoden för autentisering är OAuth 1.0a, vilket rekommenderas för produktionsmiljöer eftersom det är mycket säkrare än den grundläggande autentiseringsmetoden.

Nu när vi har lärt oss hur du ställer in autentisering är vi redo att generera autentiserade förfrågningar för att släppa ut hela kraften i WP REST API. Vi använder grundläggande autentisering genom denna serie på grund av användarvänlighet, men det rekommenderas att du använder OAuth 1.0a-autentisering, enligt OAuth 1.0a-plugin, för dina produktionsservrar.

I den nuvarande delen av serien kommer vi att få vår allra första praktiska erfarenhet med pluginprogrammet WP REST API. Vi ska:

  • analysera strukturen hos a SKAFFA SIG begäran
  • kolla hur ALTERNATIV begära självdokument API: n
  • skicka förfrågningar till servern för datahämtning
  • analysera serverns svar som innehåller egenskaper, schema och länkar

Så låt oss börja med att analysera strukturen av en enkel SKAFFA SIG begäran.

Anatomi av a SKAFFA SIG Begäran

Innan vi gräver i detaljer om att hämta data med WP REST API måste vi bekanta oss med syntaxen för en begäran som skickas till servern. Detta kommer att lägga en solid grund för våra framtida interaktioner med WP REST API.

Tänk på följande förfrågan skickad till servern:

$ GET http: // localserver / wp-json / wp / v2 / inlägg

Den typ av begäran som vi skickar är SKAFFA SIG-ett av sex HTTP-verb som vi tittade på i den första delen av denna serie. en SKAFFA SIG begäran används för att hämta data från servern. När den körs på servern hämtar ovanstående förfrågan en samling av alla postobjekt i form av JSON-data.

Med tanke på begäran URI kan vi bryta den in i följande delar:

  • http: // localserver /: URL: en för min lokala utvecklingsserver. Det kan vara vilken URL som helst beroende på var din WordPress-installation finns.
  • / Wp-json: Det är slutpunkts prefixet för WP REST API.
  • / wp: Namnutrymmet för WP REST API-plugin.
  • / v2: Det är versionen av pluginprogrammet för WP REST API.
  • / inlägg: Det är den resurs som vi vill hämta från servern.

Namnutrymmet förhindrar det överordnade som kan uppstå vid körning av flera plugins med var och en som tillhandahåller sitt eget abstraktionslager för RESTful API. Därför arbetar varje abstraktion i sin egen gräns utan att påverka de metoder och egenskaper som hör till någon annan abstraktion.

Namnrymden och versionen var inte närvarande i den äldre version 1.2 av plugin. Så i äldre versionen skulle ovannämnda förfrågan vara så här:

$ GET http: // localserver / wp-json / inlägg

Men vi kommer inte prata om bakåtkompatibilitet här. Om du vill lära dig om alla förändringar som uppstod mellan version 1.x och 2.x kan du hitta dem på den officiella sidan.

Förutom att hämta en samling resurser (inlägg) med ovanstående URI kan vi också hämta en specifik resurs genom att nämna sitt ID:

$ GET / wp / v2 / inlägg / 100

Ovanstående förfrågan kommer att returnera ett postobjekt eftersom det ser ner för en postresurs som har ett ID på 100.

Andra gånger måste vi också söka efter inlägg som uppfyller vissa specifika kriterier. För det ändamålet ger WP REST API ett sätt att använda filtrera[] syntax:

$ GET / wp / v2 / inlägg? Filter [cat] = 1

Genom att skicka ovanstående förfrågan kan vi hämta alla inlägg som tillhör en kategori ID 1. Filtersyntaxen kan vara särskilt användbar när du frågar inlägg eller navigerar mellan olika resurser, t.ex. inlägg och kategorier, med hjälp av sina relationer.

Slutligen, när man hanterar argument som tar matriser som input i filtrera[] syntax kan vi lägga till en tom uppsättning kvadratkonsoler för att uttrycka arrays som så:

$ GET / wp / v2 / inlägg? Filter [category__and] [] = 1 & filter [category__and] [] = 2

Ovanstående syntax motsvarar följande WP_Query ():

 array (1, 2)));

Därför ovanstående SKAFFA SIG begäran kommer hämta en lista över inlägg som hör till båda kategorierna med ett ID på 1 och 2. Samma syntax kan också användas för arrayargument som har mer än två element. Observera att användningen av category__and parametern kräver användarautentisering med edit_posts privilegier.

Vi kommer att undersöka filtrera[] syntax i mer detalj i ett senare avsnitt.

Nu när vi har lärt oss att formatera en SKAFFA SIG begära och ge sina parametrar, är det dags att ta en titt på ALTERNATIV begäran. En ALTERNATIV förfrågan gör det enkelt att navigera genom API: n och fungerar faktiskt som ett självdokumentation för att göra API: n mer tillgängligt genom att dokumentera alla tillgängliga HTTP-metoder på en slutpunkt, och i sin tur de argument de stöder.

Navigera genom API Använda ALTERNATIV Begäran

Som tidigare nämnts ALTERNATIV begäran kan vara till stor hjälp när du utforskar API: n. Det nämner alla slutpunkter som hör till en viss rutt och ger en lista med parametrar dessa ändpunkter stödjer CRUD-operationer.

Låt oss skicka en ALTERNATIV begäran till / Wp / v2 / inlägg rutt för att kontrollera vilka ändpunkter den stöder och vilka parametrar vi kan passera längs SKAFFA SIG begära att fråga data:

$ curl -X OPTIONS wp / v2 / inlägg

Jag har använt cURL för att skicka ovanstående förfrågan, men du kan använda valfritt verktyg, inklusive Postman. Var noga med att inkludera hela sökvägen till ovanstående rutt, inklusive sökvägen till din server.

"namespace": "wp / v2", "metoder": [...], "slutpunkter": [...], "schema": ..., "_links": ...

Ovanstående ALTERNATIV begäran till / Wp / v2 / inlägg Rutt returnerar data i JSON-formatet som innehåller fem egenskaper:

  1. namespace
  2. metoder
  3. endpoints
  4. schema
  5. _links
"namespace": "wp / v2", ...

De namespace egendom identifierar namnrymden för det aktuella plugin. I vårt fall är det wp / v2, betecknar version 2 i WP REST API. Vi har redan tittat på namnrymden och det syfte som det tjänar i föregående avsnitt.

... "metoder": ["GET", "POST"], ...

De metoder Egenskapen innehåller en uppsättning av alla metoder som stöds av den aktuella rutten. Genom att titta på svaret gav den ovannämnda begäran tillbaka det klart att / Wp / v2 / inlägg Rutt stöder två metoder, nämligen SKAFFA SIG och POSTA. Det betyder att vi kan använda / Wp / v2 / inlägg rutt för att hämta inlägg, samt skapa ett nytt inlägg. Vi kommer att ta itu med POSTA metod i nästa del av denna serie, så låt oss bara fokusera på SKAFFA SIG metod för tillfället.

Nästa fastighet-endpoints-innehåller en uppsättning av de stödda ändpunkterna för den aktuella rutten. Den här egenskapen är direkt kopplad till den tidigare nämnda metoder egenskap eftersom den listar slutpunkter för de stödda metoderna.

... "ändpunkter": ["metoder": ["GET"], "args": ..., "metoder": ["POST"], "args": ..., ...

De endpoints Egenskapen innehåller objektvärden som i sin tur innehåller två egenskaper, nämligen metoder och args. De metoder Egenskapen innehåller en uppsättning HTTP-metoder och nästa args Egenskapen innehåller alla argument som stöds för dessa metoder. Det här är de argument som vi skickar längs begäran i form av URI-parametrar.

Titta på argumenten som stöds av SKAFFA SIG metod, vi stöter på nio argument som inkluderar sammanhangsidaper sida, etc. Dessa argumentobjekt innehåller två egenskaper, nödvändig och standard. De nödvändig Egenskapen indikerar om argumentet är obligatoriskt och standard egenskapen representerar argumentets standardvärde.

"metoder": ["GET"], "args": "context": "krävs": false, "default": "view", "sida": "krävs": false, "default" 1, "per_sida": "krävs": falskt, "standard": 10, "filter": "krävs": false

De schema egendom i det returnerade svaret dokumenterar alla egenskaper för den aktuella resursen. Schemat definierar en struktur för data i JSON-formatet. Schemaformatet som används i WP REST API är baserat på utkast 4 i JSON schema specifikationerna.

Den sista _links Egenskapen innehåller en rad objekt som innehåller länkarna till associerade resurser. Nyckeln i objektet anger relationstypen (t.ex.. författare, samling, självkommentarer, etc.), med sitt värde som länken till den därmed sammanhängande resursen. Denna länkstandard är baserad på HAL (Hypertext Application Language). Du kan hitta mer om HAL genom att läsa specifikationerna som skapats av Mike Kelley.

På ett liknande sätt kan vi skicka en ALTERNATIV Be om andra vägar, inklusive användarnas, kommentarer, media, sidor etc. för att kontrollera deras stödda metoder och argument. ALTERNATIV Förfrågningar är din bästa vän när du arbetar med WP REST API.

WP REST API ger ännu ett sätt att bedöma API-tillgängligheten genom att skicka en SKAFFA SIG begäran till / Wp-json indexväg. Här listas alla rutter och deras slutpunkter tillsammans med deras stödda metoder och argument.

$ curl -X GET http: // wordpress-server / wp-json

Ovanstående förfrågan kommer att returnera ett svarobjekt som innehåller en ruttegenskap enligt följande:


Denna funktion är oerhört kraftfull eftersom den listar alla rutter och deras stödda metoder och argument, vilket eliminerar behovet av att alla dessa dokumenteras externt. Vi kommer att referera till detta svarobjekt när vi utför CRUD-operationer på olika resurser.

Vi har tittat på våra alternativ för att utforska API: n, nu börjar vi arbeta med WP REST API för att hämta data från servern.

Arbeta med inlägg

Nu har vi bekantat oss med ALTERNATIV begäran, vilket är ett självdokumentande sätt att bedöma API-tillgängligheten. Vi tittade också på hur det visar stödda metoder och argument för en given rutt. Med hjälp av denna kunskap är vi nu redo att hämta olika resurser från servern med hjälp av WP REST API.

Resursen vi ska börja med är inlägg resurs, eftersom det är huvudbyggnaden av WordPress. Vi kommer att hantera hämtning av inlägg med olika filter. Genom att använda denna kunskap kommer du att kunna fråga inlägg via WP REST API precis som du gör med WP_Query () klassen.

Under hela serien har vi arbetat med inlägg resurs för att visa exemplarförfrågningar och deras svar, och vi vet redan hur man hämtar postkollektion och en enskild post med sitt ID. Så vi kommer inte att täcka det igen. I stället kommer vi att titta på några mer avancerade sätt att hämta inlägg med parametrar på toppnivå och filtrera[] syntax.

Arbeta med parametrar på hög nivå

WP REST API visar några av de vanligaste frågvariablerna för inlägg direkt på SKAFFA SIG slutpunkt. Dessa parametrar är:

  1. sammanhang: Omfanget av begäran. Möjliga värden kan vara sebädda in eller redigera.
  2. sida: Den aktuella sidan i postsamlingen.
  3. per sida: Totalt antal inlägg per sida.
  4. Sök: Sökfrågan. Begränsa resultat till matchande sträng.
  5. författare: Författarens ID. Används för att begränsa resultat som tillhör en viss författare.
  6. utesluta: En rad postposter som ska uteslutas från sökresultat.
  7. inkludera: Begränsa resultaten till post-ID-er som anges i denna array.
  8. offset: Offset sökresultaten med angivet nummer.
  9. ordning: Kollektionsordningen. Kan antingen vara asc eller desc.
  10. sortera efter: Sortering av attribut hos samlingen. Möjliga värden kan vara idtitel eller snigel.
  11. snigel: Begränsa resultaten till ett inlägg med en viss slug.
  12. status: Används för att begränsa samlingen av inlägg som har en viss status.

De sammanhang Parametern används för att hämta inlägg beroende på omfattningen vi arbetar med. Om vi ​​bara listar inlägg på någon indexsida, så är vi bra att gå med se sammanhang. Men om vi hämtar inlägg för att redigera dem måste vi använda redigera sammanhang:

$ GET / wp / v2 / inlägg? Context = edit

De redigera context parameter introducerar ytterligare  fält i fält som titelinnehållutdrag, etc. Värdet av detta  Fältet kan echoed ut i redigeraren för att redigera innehållet.

Använda redigera sammanhang kräver att du autentiseras som användare med edit_posts privilegier.

Använder sig av bädda in som värdet av sammanhang parameter hämtar samlingen av inlägg med en minimal delmängd av deras egenskaper.

De andra parametrarna ovan är ganska självförklarande, och du kan leka med dem i din HTTP-klient.

Dessa var de grundläggande parametrarna som låter dig fråga inlägg baserat på vissa kriterier. För att begränsa våra frågningsfunktioner tillhandahåller WP REST API filtrera[] syntax som stöder en delmängd av WP_Query () args.

Använda filtrera[] Syntax

Förutom att hämta en samling inlägg med några grundläggande översta parametrar, avslöjar WP REST API några av de WP_Query () variabler som använder filtrera[] syntax. Genom att använda denna syntax kan vi fråga inlägg på samma sätt som vi gör när vi arbetar med WP_Query () klass.

Paginationsparametrar är de viktigaste av alla filtren, eftersom de används i stor utsträckning på postlistan. Paginationsparametrarna tillåter oss att visa ett visst antal inlägg per sida och navigera till ett visst antal sidor som innehåller inlägg.

Som standard a SKAFFA SIG Förfrågan hämtar en samling på 10 inlägg per sida. Låt oss se hur vi kan skicka in en SKAFFA SIG Begär att hämta endast fem inlägg per sida:

$ GET / wp / v2 / inlägg? Filter [posts_per_page] = 5

Ovanstående förfrågan använder posts_per_page variabel som du kanske känner till om du har arbetat med WP_Query ().

De paged Parametern används tillsammans med posts_per_page parameter, och det används för att navigera till ett visst antal sidor. Efter att ha hämtat fem inlägg per sida, skulle vi göra följande förfrågan att navigera till den andra sidan:

$ GET / wp / v2 / inlägg? Filter [posts_per_page] = 5 & filter [paged] = 2

De posts_per_page och paged Filter kan vara mycket praktiskt när du arbetar för att bygga paginering på listningssidor med hjälp av WP REST API. Dessa två parametrar motsvarar per sida och sida parametrar på hög nivå. Följaktligen gör följande förfrågan samma arbete som ovanstående:

$ GET / wp / v2 / inlägg? Per_page = 5 & sida = 2

Förutom att samlingen av inlägg returnerar ovanstående begäran returnerar servern också ett antal rubriker med ett svar som innehåller användbar information, inklusive det totala antalet inlägg och antalet sidor. Dessa värden finns i X-WP-TotalPages och X-WP-Total svarhuvud.

De X-WP-TotalPages och X-WP-Total svarhuvuden är extremt användbara när du skapar pagination med WP REST API, eftersom de anger totalt antal sidor och totalt antal inlägg.

Förutom pagineringsfilter, den andra viktigaste användningen av filtrera[] syntaxen är att kunna fråga inlägg efter deras datum. För detta ändamål, filtrera[] syntaxen stöder åtta parametrar, samma som i WP_Query () klass:

  1. år: Det fyrsiffriga året (t ex 2015 eller 2016)
  2. monthnum: Månadens nummer från 1 till 12
  3. m: Sexsiffrig årsmånad (t ex 201601)
  4. w: Årets vecka från 0 till 53
  5. dag: Månadens dag från 1 till 31
  6. timme: Dygnet på dagen från 0 till 23
  7. minut: Timmars minut från 0 till 60
  8. andra: Den andra i minuten från 0 till 60

Så om vi letar efter de inlägg som publicerades på datumet 2015-10-15 (åååå / mm / dd) kan detta uppnås med följande fråga:

$ GET / wp / v2 / inlägg? Filter [år] = 2015 och filter [månad] = 10 och filter [dag] = 15

En liknande fråga kan förberedas med hjälp av ovanstående parametrar om vi behöver begränsa vår sökning till exakt timme och minut.

Vi har redan sett i en tidigare del av denna handledning hur vi kunde hämta inlägg som tillhör en viss kategori eller flera kategorier med hjälp av filtrera [cat] och filtrera [category__and] parametrar. Nu ska vi använda filtrera [category__in] parameter för att visa inlägg som tillhör kategorier med ett ID på 5 och 6:

$ GET / wp / v2 / inlägg? Filter [category__in] [] = 5 & filter [category__in] [] = 6

Ovanstående förfrågan kommer att hämta en lista över alla inlägg som tillhör kategorier med ID 5 och 6.

Den motsatta effekten kan uppnås genom att använda filtrera [category__not_in] parameter på följande sätt:

$ GET / wp / v2 / inlägg? Filter [category__not_in] [] = 5 & filter [category__not_in] [] = 6

Detta hämtar en lista med inlägg medan alla poster som tillhör kategorier med ett ID på antingen 5 eller 6 exkluderas.

Mer kan skrivas på med hjälp av filtrera[] syntax, men jag kommer inte att täcka allt det här. Du kan hitta en lista över alla fråga variabler som stöds av filtrera[] syntax i den officiella dokumentationen av version 1 i plugin. En stor del av denna information gäller fortfarande med version 2 i WP REST API, men saknas fortfarande i vissa områden. Vid tidpunkten för skrivandet av denna handledning anges inte den officiella dokumentationen av version 2 något om filtrera[] syntax och frågan vars den stöder, men vi kan hoppas att se förbättringar i den officiella dokumentationen inom en snar framtid eftersom det finns ett antal personer (inklusive mig själv) som bidrar till pluginutvecklingen och dokumentationen.

Nu när vi har tittat på olika alternativ när du frågar inlägg med hjälp av WP REST API, är vi redo att vidareutveckla vår resa och titta på några andra resurser som stöds av WP REST API.

Arbeta med Postrevisioner, Kategorier, Taggar och Meta

Postrevisioner ger ett sätt att visa och återställa ändringar som gjorts till ett inlägg. WP REST API ger dig möjlighet att visa alla ändringar av ett inlägg genom att fråga / tjänster // revideringar slutpunkt. Därför för en viss post med ett ID på 10 kan alla revisioner hämtas genom att skicka följande förfrågan:

$ GET / wp / v2 / inlägg / 10 / revisioner

Ovanstående förfrågan kommer att returnera en array som innehåller revisionsobjekt. Ändringsobjektet innehåller en delmängd av egenskaper som finns i postobjektet. Nedan visas ett exempel på revisionsobjekt i Postman:

En specifik revision kan hämtas med tanke på att vi känner till dess id. Så en revision med ett ID på 2 med inlägg med ett ID på 10 kan hämtas av följande objekt:

$ GET / wp / v2 / inlägg / 10 / revisioner / 2

Ovanstående förfrågan kommer att returnera ett enda revisionsobjekt.

Andra än postrevisioner kan kategorier för ett specifikt inlägg hämtas med följande förfrågan:

$ GET / wp / v2 / kategorier? Post =

Och för taggarna använder vi följande förfrågan:

$ GET / wp / v2 / tags? Post =

Med  vara postens id.

Om vi ​​behöver hämta postmeta för post som har ett ID på 10 skickar vi följande förfrågan som en autentiserad användare:

$ GET / wp / v2 / inlägg / 10 / meta

Detta kommer att returnera en rad metaobjekt.

Observera att för att arbeta med post och sida meta i WP REST API måste du ha kompaniet plugin installerat tillgängligt på GitHub av WP REST API-teamet.

Arbeta med andra resurser

Nu har vi fått en ganska solid grund för att arbeta med WP REST API för att hämta data. Vi har redan tittat på alternativförfrågan och hur det hjälper oss att utforska API: n utan behov av extern dokumentation. 

Du kan alltid skicka en ALTERNATIV begära en viss resurs och kontrollera vilka slutpunkter och parametrar den stöder. Om du behöver lista alla de rutter som WP REST API tillhandahåller kan du skicka en SKAFFA SIG begäran till indexändpunkt på / Wp-json som vi lärde oss göra i början av denna handledning.

Med tanke på denna fördel med självdokumentation tror jag inte att vi ytterligare behöver utforska varje enskild resurs i denna handledning, eftersom ni nu kan göra det själv.

Vad är nästa??

I den här långa handledningen lärde vi oss att utforska API: n med hjälp av OPTIONS-förfrågan och hämta data från servern med hjälp av WP REST API. Vi tittade bara på en handfull resurser, inklusive inlägg, postrevision och posta meta, eftersom vi inte kunde täcka alla stödda resurser i bara en handledning. Men du borde nu kunna utforska API på egen hand med hjälp av de tekniker som vi lärde oss i den här handledningen.

WordPress har en oerhört aktiv ekonomi. Det finns teman, plugins, bibliotek och många andra produkter som hjälper dig att bygga upp din webbplats och ditt projekt. Plattformens open source-natur gör det också till ett bra alternativ, från vilket du kan förbättra dina programmeringsförmåga. Oavsett fall kan du se vad allt finns tillgängligt på Envato Marketplace.

I nästa del av denna serie kommer vi att lära oss att utföra de andra tre operationerna av CRUD, dvs skapa, uppdatera och ta bort resurser. Så håll dig uppdaterad ...