Will this work and I'd so how risky is it to future problems?
Sì, funzionerà e quanto è rischioso dipende da quanto è buona la tua implementazione. Questo è perfettamente accettabile se fatto correttamente. Ho integrato con successo PHP e C, quando PHP era semplicemente troppo lento per eseguire determinati compiti di nicchia in tempo reale (IIRC, PHP è 7 volte più lento della sua controparte C).
La migliore implementazione è ignorare il fatto che siano specificamente PHP / Python e trattarli come due lingue separate.
Ora, devi scegliere un modo "standard" di interagire. Il protocollo HTTP è probabilmente il più semplice: tutti hanno già installato un server Web, quindi è solo questione di mettere online lo script.
Da qui, devi allontanarti dal fatto che sono ancora in PHP / Python e progetta la tua API senza saperlo. Ad esempio, immagina di avere una calcolatrice:
<?php
print '<answer>' . ($_GET['one'] + $_GET['two']) . '</answer>';
?>
Quindi la tua API sarebbe http://location/script.php?one=5&two=7
. Questo è perfettamente accettabile: l'utente dell'API si aspetta una risposta all'interno di un tag <answer>
(il mio esempio è un XML pigro mans, puramente come una dimostrazione, ma penso che dovresti esaminare l'output JSON ). Questo, non è:
<?php
print eval($_GET['expr']);
?>
Poiché la tua API sarebbe http://location/script.php?expr=5+7
. Anche se risultasse nella stessa risposta (e, ignorando i principali difetti di sicurezza), il chiamante deve conoscere i dettagli di implementazione di PHP ( eval
è una funzione PHP che valuterà semplicemente il suo input come vero codice PHP). Se hanno fatto 2^3
, è quel 2 xor 3
o 2 * 2 * 2
(2 alla potenza 3). Questo è un cattivo progetto: i tuoi input dovrebbero essere indipendenti dalla lingua in cui la tua API è implementata. Oltre a questo, come possiamo distinguere tra un messaggio di errore e una risposta? Nessuna magia "se la risposta non è un numero", per favore.
Lato Python - devi solo assicurarti che le richieste HTTP falliscano con garbo. Se non riesci a connetterti al tuo script, prova di nuovo, e se fallisce, lascia un bel messaggio di errore chiedendo loro di riprovare più tardi. Non mostrare solo una traccia dello stack Python.
Dovresti anche documentare la tua API nel modo migliore possibile - questo ti farà risparmiare un sacco di tempo lungo la linea. Di 'ciò che ciascuno degli input dovrebbe essere, in quale intervallo dovrebbero rientrare e fornire alcuni buoni esempi su come usarlo.
Lato API: dovresti anche provare a fallire rapidamente se qualcosa non va. Se una variabile è mancante, incompleta o non valida, stampa un messaggio ed esci come prima cosa che fai. Esegui non semplicemente esegui i valori e poi fagli tornare un messaggio di errore PHP (ricorda che non dovrebbero sapere o preoccuparsi di quale lingua è implementata la tua API), ma dovrebbe ottenere una percentuale di cortesia piacevole % co_de.