{"id":230991,"date":"2022-12-24T11:59:00","date_gmt":"2022-12-24T08:59:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230991"},"modified":"2022-12-07T10:57:29","modified_gmt":"2022-12-07T07:57:29","slug":"strukturera-api-funktionalitet","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/strukturera-api-funktionalitet\/","title":{"rendered":"Strukturera API-funktionalitet"},"content":{"rendered":"\n<p>Jag har inte s\u00e5 mycket erfarenhet n\u00e4r det g\u00e4ller att skapa API:er. Jag har gjort en hel del arbete n\u00e4r det kommer till att integrera WordPress med tredjeparts API:er, men jag har lagt ner v\u00e4ldigt lite tid p\u00e5 att skapa ett system som har sitt API som andra system kan interagera med.<\/p>\n<p>N\u00e4r det g\u00e4ller det senare \u00e4r jag faktiskt mitt uppe i det (och jag l\u00e4r mig mycket). Kontentan av projektet \u00e4r att det finns en iOS-app som interagerar med WordPress via <a href=\"https:\/\/developer.wordpress.org\/rest-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">REST API<\/a> p\u00e5 ett dubbelriktat s\u00e4tt.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160154-61e7069145e53.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160154-61e7069145e53.png\" alt=\"Strukturera API-funktionalitet\" ><\/a><\/p>\n<p>Jag \u00e4r sugen p\u00e5 att dela med mig av mer om det, men jag m\u00e5ste g\u00f6ra det n\u00e4r projektet \u00e4r l\u00e4ngre fram.<\/p>\n<p>Men n\u00e4r det g\u00e4ller att arbeta med tredje parts API:er och sedan bygga komponenter i ett WordPress-projekt som interagerar med dem, \u00e4r tv\u00e5 av de saker jag konsekvent tycker \u00e4r anv\u00e4ndbara:<\/p>\n<ul>\n<li><a href=\"http:\/\/docs.guzzlephp.org\/en\/stable\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">anv\u00e4nda ett l\u00e4mpligt bibliotek<\/a> ,<\/li>\n<li>diagram \u00f6ver systemet,<\/li>\n<li>dela upp funktionaliteten i delar.<\/li>\n<\/ul>\n<p>Och de tv\u00e5 sista punkterna ovan \u00e4r vad jag vill t\u00e4cka i det h\u00e4r inl\u00e4gget.<\/p>\n<h2>Strukturera API-funktionalitet<\/h2>\n<p>Ingen kod \u00e4r inblandad i det h\u00e4r inl\u00e4gget, men det kanske \u00e4r en guide till hur du kan g\u00e5 vidare i ditt arbete med att strukturera API-funktionalitet eller g\u00f6ra n\u00e5got liknande p\u00e5 egen hand.<\/p>\n<h3>Tredjepartsbibliotek<\/h3>\n<p>Jag n\u00e4mner detta bara f\u00f6r att jag tror att det \u00e4r v\u00e4rdefullt att \u00e5teranv\u00e4nda bepr\u00f6vade och sanna l\u00f6sningar som har testats (och d\u00e4rmed anv\u00e4nts) \u00f6ver hela linjen i en m\u00e4ngd olika projekt.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160154-61e706951696d.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160154-61e706951696d.png\" alt=\"Strukturera API-funktionalitet\" ><\/a><\/p>\n<p>Guzzle \u00e4r mitt favoritbibliotek. Ja, WordPress har inbyggda funktioner f\u00f6r att kommunicera med andra webbadresser, men det finns mer du kan g\u00f6ra med Guzzle (s\u00e4rskilt n\u00e4r det g\u00e4ller komponenter i beg\u00e4ran) \u00e4n med WordPress.<\/p>\n<p>Visst, detta \u00e4r min \u00e5sikt, men jag tycker om att arbeta med det. <a href=\"http:\/\/docs.guzzlephp.org\/en\/stable\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Och dokumentationen \u00e4r solid<\/a>.<\/p>\n<h3>Diagrammering av systemet<\/h3>\n<p>N\u00e4r du arbetar med att integrera med tredje parts API:er tillr\u00e4ckligt l\u00e4nge, ska du v\u00e4nja dig vid processen att st\u00e4lla in hur systemet fungerar. Vanligtvis g\u00e5r det ungef\u00e4r s\u00e5 h\u00e4r:<\/p>\n<ol>\n<li>skapa en API-klient f\u00f6r att ansluta till API:t,<\/li>\n<li>st\u00e4ll in de funktioner som kr\u00e4vs f\u00f6r att g\u00f6ra de f\u00f6rfr\u00e5gningar du beh\u00f6ver,<\/li>\n<li>analysera svaret,<\/li>\n<li>returnera det till det ursprungliga objektet eller funktionen som anropade beg\u00e4ran.<\/li>\n<\/ol>\n<p>Detta \u00e4r lite av en \u00f6verf\u00f6renkling (att skapa API-klienten kan trots allt vara en uppgift i och f\u00f6r sig), men alla po\u00e4ng \u00e4r desamma (och kanske inte blir en d\u00e5lig serie \ud83e\udd14).<\/p>\n<p>Hur som helst, framf\u00f6r allt skadar det aldrig att diagramma systemet. Det h\u00e4r \u00e4r n\u00e5got jag fortfarande g\u00f6r eftersom det hj\u00e4lper mig p\u00e5 s\u00e4tt och vis att formulera vad det \u00e4r jag bygger och se om det finns luckor i fl\u00f6det av kontroll genom applikationen.<\/p>\n<p>H\u00e4r \u00e4r varf\u00f6r, om ingen annan anledning, detta \u00e4r viktigt: Att formulera vad du ska g\u00f6ra hj\u00e4lper dig att f\u00f6rst\u00e5 vad du g\u00f6r och avsl\u00f6jar ofta luckor i ditt t\u00e4nkande som du tar f\u00f6r givet.<\/p>\n<p>S\u00e5 n\u00e4r det g\u00e4ller att l\u00e4gga upp ett system, anta inte att du har fattat allt.<\/p>\n<h3>Separera funktionaliteten<\/h3>\n<p>Om du har l\u00e4st den h\u00e4r bloggen hur l\u00e4nge som helst, d\u00e5 vet du att jag \u00e4r ett fan av att f\u00f6lja hela utvecklingsid\u00e9erna f\u00f6r &quot;separation of concerns&quot;.<\/p>\n<p>Detta \u00e4r sant av flera sk\u00e4l, varav de minsta inte \u00e4r:<\/p>\n<ul>\n<li>kunna enhetstesta en API-klient isolerat,<\/li>\n<li>h\u00e5lla koden f\u00f6r kommunikation med front-end och back-end oberoende.<\/li>\n<\/ul>\n<p>N\u00e4r du har en klass dedikerad till att k\u00f6ra aff\u00e4rslogik p\u00e5 v\u00e4rdena, kan du \u00f6verf\u00f6ra mycket av felhanteringen till mellanklassen.<\/p>\n<p>Detta inneb\u00e4r att k\u00e4rnklassen som ansvarar f\u00f6r majoriteten av aff\u00e4rslogiken b\u00f6r ha exakt vad den beh\u00f6ver f\u00f6r att utf\u00f6ra sitt arbete. Detta betyder inte att det inte finns n\u00e5gon felkontroll som borde vara p\u00e5 plats (division med noll eller n\u00e5got, du vet?), men det betyder att data kan kontrolleras innan den ens n\u00e5r k\u00e4rnklassen via mellanklassen.<\/p>\n<p>Och det kan inte bara kontrollera om det saknas information, utan det kan ocks\u00e5 rapportera dessa fel tillbaka till front-end.<\/p>\n<h2>Tre punkter att komma ih\u00e5g<\/h2>\n<p>Om du skapar ett Ajax-beroende system i WordPress \u00e4r po\u00e4ngen med allt detta trefaldig:<\/p>\n<ol>\n<li>diagram systemet du skapar,<\/li>\n<li>skapa en mellanliggande klass f\u00f6r att hantera eventuell saknad information och rapportera tillbaka felen,<\/li>\n<li>skicka endast den fullst\u00e4ndiga informationen till k\u00e4rnverksamheten efter att all information har verifierats.<\/li>\n<\/ol>\n<p>N\u00e4r du har gjort det, skulle m\u00e5let vara att f\u00e5 k\u00e4rnverksamheten att returnera de beg\u00e4rda v\u00e4rdena utan fel eftersom de kommer att ha f\u00e5ngats innan de ens n\u00e5dde det.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En guide till hur du kan g\u00e5 vidare i ditt arbete med att strukturera API-funktioner eller g\u00f6ra n\u00e5got liknande p\u00e5 egen hand.<\/p>\n","protected":false},"author":1,"featured_media":224405,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[848,901,724,868],"tags":[1173],"class_list":["post-230991","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-koda","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230991","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=230991"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/230991\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/224405"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=230991"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=230991"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=230991"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}