2014-05-21 4 views
0

JSON-RPC HTTP 서비스를 만들려고합니다. POST 메서드를 사용하고 있습니다.PHP 간단한 JSON-RPC

rest.php

<?php 
header('Content-Type: application/json'); 
$input = file_get_contents("php://input"); 
$json = json_decode($input); 

$output = $json->num + 10; 
echo json_encode($output); 
?> 

입력 :

{"num": 10 } 

출력 :

20 

가 지금은 더 만족 구현하기 위해 노력하고 hods, 그래서 나는이 같은 입력을 사용할 수 있습니다

public function add($n1, $n2) { 
    return $n1 + $n2; 
} 

Q : 어떻게라는 방법을 결정하고 나머지를 실행하는

{ "method":"add", "params": { "num1": 15, "num2": 10 } } 

그래서 내가 rest.php에 기능을 추가 할 수 있습니다. 새로운 입력으로 PHP
?

편집 :

<?php 

header('Content-Type: application/json'); 
$input = file_get_contents("php://input"); 
$json = json_decode($input); 

foreach ($json->params as $param) { 
    $params[] = $param; 
} 

$output = call_user_func_array($json->method, $params); 
echo json_encode($output); 

function add($n1, $n2) { 
    return $n1 + $n2; 
} 

답변

1

당신은 당신이 얻을 문자열이 기존 요소와 일치하는지 확인하기 위해 method_existsfunction_exists (당신의 필요의 따라)를 사용할 수 있습니다.

그런 다음 call_user_func 또는 call_user_method을 사용하여 기능을 실행할 수 있습니다. 예를 들어

:

<?php 
class foo{ 
    public function add($n1, $n2) { 
     return $n1 + $n2; 
    } 
} 

$method = "add"; 
$object = new foo(); 
$n1 = 1; 
$n2 = 8; 
if(method_exists($object, $method)) 
{ 
    call_user_method($method, $object, $n1, $n2); 
} 

EDIT이 예에서 I 하드 코딩 된 값을 N1과 N2 파라미터를 할당. 귀하의 경우 JSON에서 가져온 params 배열을 가져 와서 모든 메서드에 매개 변수로 제공 할 수 있습니다. 이런 식으로 메서드 본문 외부에서받은 매개 변수를 테스트 할 필요가 없습니다.

+0

내 테스트를 원래 게시물에 추가했습니다. –