Hoi,

Ik heb een API client class.
In de constructor regel ik de connectie met het api token etc. Verder bevat het een private getRequest en postRequest method. En unieke api call methods die de get of post request methodes gebruiken.

Elke api call heeft eigenlijk de zelfde functionaliteit. Bij een 200 wil ik altijd het object returnen, en bij elke andere foutieve status code wil ik gewoon die melding returnen.
Dit doe ik nu in elke call met een switch statement. Nu zei iemand dat dat slordige code wordt, en dat ik interfaces moet gaan leren. Alleen kom ik er niet echt uit.
Ik heb hier bijvoorbeeld 1 van mijn api calls

public function postMembership($body){
		$request = $this->postRequest('/Memberships', $body);
		$response = json_decode(wp_remote_retrieve_body($request), true);
		$response['statusCode'] = json_decode(wp_remote_retrieve_response_code($request), true);
		switch($response['statusCode']){
			case 200:
				return $response;
			case 400:
			case 401:
			case 404:
			case 500:
				return $response['error']['message'];
			default:
				return $response;
		}
	}


Maar zou niet zo gauw weten hoe ik die switch kan aanpassen naar een interface.

[size=xsmall]Toevoeging op 02/06/2022 16:00:58:[/size]

Ik had een beetje gepuzzeld, en kwam er achter dat ik het zo een beetje kan aanpakken

$codeMapping = [
    200 => ShowResponseHandler::class
    500 => ShowErrorHandler::class
];


$handlerClass = $codeMapping[$statusCode];
$handler = new $handlerClass;

return $handler->handler($response);
Ik zou geen interface leren, ik heb ze nog nooit nodig gehad in de 21 jaar dat ik met PHP heb gewerkt.
Een interface heb je alleen nodig als je twee of meer objecten op exact dezelfde manier wilt gebruiken.
Bijvoorbeeld met de SessionHandlerInterface, dan kan je zelf een eigen implementatie maken.
Maar je kan de relatie ook omkeren: je maakt 1 object met allemaal if-jes, bijvoorbeeld bij een database class:

if ($this->PostgreSQL) {/* doe je ding */}
else {/* vertel dat het niet werkt met MySQL en dat iemand PostgreSQL moet gaan gebruiken */}

Zo te zien gebruik je WordPress en in het WordPress-ecosysteem hebben ze sowieso vaak maling aan current best practices voor webdevelopment en PHP, want ze weten het zelf meestal beter...

Maar ik vermoed dat iemand bedoelde dat je beter kunt inhaken op bijvoorbeeld hooks voor HTTP requests via de Requests_Hooker interface omdat dit voorkomt dat je zelf een complete HTTP-engine moet schrijven.
Ward van der Put op 02/06/2022 18:11:55

Zo te zien gebruik je WordPress en in het WordPress-ecosysteem hebben ze sowieso vaak maling aan current best practices voor webdevelopment en PHP, want ze weten het zelf meestal beter...

Wordpress is toch spaghetti code? Tenminste als ik naar die 'codex' van ze kijk, dan wil ik echt never nooit een Wordpress template schrijven. Wat een meuk :-)
Het klopt, ik maak een plug-in voor WordPress. Maar ik wil het zelf gewoon goed en netjes programmeren. Niet dat als ik een update moet uitvoeren dat ik dan met m’n handen in het haar zit.

Reageren