рдпрджрд┐ рдЖрдк рдПрдХ рдбреЗрд╡рд▓рдкрд░ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреАрдПрдЪрдкреА рдореЗрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдФрд░ рдЙрд╕реЗ рдЕрдВрддрддрдГ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдПрдкреАрдЖрдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдпрд╣ рд▓реЗрдЦ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рд╣реИ;)ред
JSON-RPC v1.0 2005 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, 5 рд╕рд╛рд▓ рдмрд╛рдж
рджреВрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ ред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдореЛрдмрд╛рдЗрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдпреБрдЧ рдореЗрдВ, рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрднреА рднреА рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рд░рд▓ рдорд╛рдирдХ рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреА рдмрд╛рдЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
JSON-RPC рдФрд░ 2.0 рднреА рдХреНрдпреЛрдВ?
рдореИрдВ рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛:
- рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдорд╛рдирдХ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдЪрдпрдиред
- рддреЗрдЬреА рд╕реЗ рдЖрд╕рд╛рди рдкрд╛рд░реНрд╕рд┐рдВрдЧред JSON-RPC XML-RPC рдпрд╛ SOAP рдХреА рддрд░рд╣ рд░рд╛рдХреНрд╖рд╕реА рдирд╣реАрдВ рд╣реИред
- рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧред REST рдмрд╛рдЗрдХ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрддреНрддрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреИрд╕реЗ рдХрд░реЗрдВ рдФрд░ рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред
- рдХрддрд╛рд░ рд╕рдорд░реНрдерди рдХреЛ рдмреБрд▓рд╛рдУред рдЕрдм 5 HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдПрдХ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ :)ред
- рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдмрд┐рдВрджреБред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, /rpc-server.php рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред
- рдлреЛрди рдХрд░рддреЗ рд╕рдордп рдирд╛рдорд┐рдд рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдердиред
рд╕рдВрд╕реНрдХрд░рдг 1.0 рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, 2.0 рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдХреЙрд▓ рдХрддрд╛рд░ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЕрдиреБрд░реЛрдз / рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
--> {"jsonrpc": "2.0", "method": "subtract", "params": {"subtrahend": 23, "minuend": 42}, "id": 3} <-- {"jsonrpc": "2.0", "result": 19, "id": 3} --> {"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1} <-- {"jsonrpc": "2.0", "result": 19, "id": 1} --> [ {"jsonrpc": "2.0", "method": "sum", "params": [1,2,4], "id": "1"}, {"jsonrpc": "2.0", "method": "foobar", "id": "2"} ] <-- [ {"jsonrpc": "2.0", "result": 7, "id": "1"}, {"jsonrpc": "2.0", "error": {"code": -32601, "message": "Method not found."}, "id": "2"} ]
рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдЗрд╕ рдЬрдЯрд┐рд▓ "рд░рдЪрдирд╛рддреНрдордХ" рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдпрд╣ рд╕рд╡рд╛рд▓ рд╣рдореЗрд╢рд╛ рдЙрдарддрд╛ рд╣реИ: рдХреБрдЫ рддреИрдпрд╛рд░ рдХрд░реЗрдВ рдпрд╛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдХреБрдЫ рд▓рд┐рдЦреЗрдВ?
рдПрдХрджрдо рд╕рд╣реА рджреБрдирд┐рдпрд╛ред рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП?
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╣рдо рдЙрд╕ рдЯреВрд▓ рдХреЗ рдорд╛рдкрджрдВрдб рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЦреЛрдЬрдирд╛ / рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
- рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рдЕрдиреБрдкрд╛рд▓рдиред рдЗрд╕ рдХрд╛рд░рдХ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдХреНрд▓рд╛рдЗрдВрдЯ / рд╕рд░реНрд╡рд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА
- рдПрдХрд▓-рдлрд╛рдЗрд▓ рд╕реНрд╡рддрдВрддреНрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рдореИрдВ рдХрд┐рд╕реА рднреА рдврд╛рдВрдЪреЗ рдХреЛ рд▓рд╛ рдЬрд╝реЗрдВрдб рдпрд╛ PEAR рдирд╣реАрдВ рдЦреАрдВрдЪрдирд╛ рдЪрд╛рд╣рддрд╛
- рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ред рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдЧрд╛рд░рдВрдЯреА рд╣реИ рдХрд┐ рдУрдкрди-рд╕реЛрд░реНрд╕ рд╕рдорд╛рдзрд╛рди рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛;)
- рдЕрдВрджрд░ рд╕реБрдВрджрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди ред рд╕рдм рдХреБрдЫ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓, рд╕реНрдкрд╖реНрдЯ рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдСрдЯреЛ-рдЦреЛрдЬ рддрдВрддреНрд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ред JSON-RPC рд╕рд░реНрд╡рд░ рдХреЛ рдЗрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрдЯрд╛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
- рд╕рд╛рдзрд╛рд░рдг рдХрдиреЗрдХреНрд╢рдиред рдореИрдВрдиреЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛, рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛, рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
- рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░реЙрдХреНрд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред рдЬрдм рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рддреИрдпрд╛рд░ рд╕рд░реНрд╡рд░ рд░рдЦрддреЗ рд╣реИрдВ рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреНрдпреЛрдВ рд▓рд┐рдЦреЗрдВ? ;)
рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрддред
рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдмрд┐рдЯ
рдХреНрдпреЛрдВрдХрд┐ JSON-RPC рдПрдХ рдХрд╛рдлреА рдпреБрд╡рд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИ, рдлрд┐рд░ рднреА рдЗрд╕рдореЗрдВ рдХреБрдЫ рдХреНрд╖рдг рд╣реИрдВ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдореЛрджрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ Dojo рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд
рд╕реЗрд╡рд╛ рдорд╛рдирдЪрд┐рддреНрд░рдг рд╡рд┐рд╡рд░рдг рд╣реИ ред рдПрд╕рдПрдордбреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рд╡реЗрдм рд╕реЗрд╡рд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЕрдкрдиреЗ рддрд░реАрдХреЛрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рддреИрдирд╛рдд рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдмрд╣реБрдд рдХрдо рд╕рдорд╛рдзрд╛рди рдЗрд╕рдХреЗ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
Zend_Json_Server , inputEx рдврд╛рдВрдЪрд╛ (
рдкрд░реАрдХреНрд╖рдг рд░реВрдкреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг ) рдФрд░
рд╕реНрд╡рдпрдВ Dojo рд░реВрдкрд░реЗрдЦрд╛ ред
рдЖрдЗрдП рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдЦреЛрдЬ рдкрд░ рдЬрд╛рдПрдВред
PHP рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдореИрдВрдиреЗ
рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рдПрдХ
рдЯреИрдмрд▓реЗрдЯ рд╕реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕реВрдЪреА рд▓реАред
| php-JSON-RPC | jsonrpc2php | tivoka | рдХрдирд┐рд╖реНрда | JSON-RPC-php | JSONRpc2 | Zend Json рд╕рд░реНрд╡рд░ | zoServices |
рд╕рд░реНрд╡рд░ |
рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдЕрдиреБрдкрд╛рд▓рди | - | рдмреИрдЪ рдореЛрдб рдореЗрдВ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╕рдорд░реНрдердиред
| + | рдкрд░рдо рдирд╛рдо рдХрд╛ рдХреЛрдИ рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд╣реАрдВ | + | + | + | рдкрд░рдо рдирд╛рдо рдХрд╛ рдХреЛрдИ рд╡реИрдХрд▓реНрдкрд┐рдХ рдирд╣реАрдВ |
рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ | - | 2 | > 7 | 3 | 6 | 1 | > рел | 6 |
SMD рд╕рд░реНрдХрд┐рдЯ | - | - | - | - | - | - | + | - |
рдкрд░реАрдХреНрд╖рдг | - | + | - | + | - | + | + | - |
рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (1..5) | - | 4 рдирд┐рд░реНрдпрд╛рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рдореИрдиреБрдЕрд▓ рдореИрдкрд┐рдВрдЧ | 3. рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди | 4 | 4. рдХрдард┐рди | 4. рдЕрдВрджрд░ рдЬрд╛рджреВ! | 4ред Zend | 3ред |
рдЧреНрд░рд╛рд╣рдХ |
рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдЕрдиреБрдкрд╛рд▓рди | рдХреЛрдИ рдмреИрдЪ рдФрд░ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдирд╣реАрдВ | - | + | + | + | рдХреЛрдИ рдмреИрдЪ рдирд╣реАрдВ | - | рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдирд╣реАрдВ рд╣реИ |
рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ | 1 | - | > 7 | 4 | 2 | 1 | - | 6 |
рдкрд░реАрдХреНрд╖рдг | - | - | - | + | - | + | - | - |
рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (1..5) | 4 | - | 3. рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдХрджрдо | 4 | 4 | 4ред :) | - | 3 |
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреАрдврд╝реА | - | - | - | - | - | - | - | - |
рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рд░реАрдбрд░ рддрд░реНрдХ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рдЕрднреА рднреА рдПрдХ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЧреЛрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рдВ, рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рдХреЛрдИ "рдЖрджрд░реНрд╢" рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реВрдк рд╣реЛ рдФрд░ рдЬрд┐рд╕реЗ рдмрд┐рдирд╛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИрдВ :)
рдЕрдкреВрд░реНрдг рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рднрд╛рд╡рдирд╛ рд╣реИ; рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдПрдкреАрдЖрдИ (рд╕рд░реНрд╡рд░, рдПрд╕рдПрдордбреА-рд╕реНрдХреАрдорд╛, рдХреНрд▓рд╛рдЗрдВрдЯ-рдкреАрдврд╝реА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЪрдХреНрд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рднреА рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдЬреЛ рдкреАрдПрдЪрдкреА рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд╛рд╡рд╛ рдпрд╛ рд╕реА # рдХрд╣рддреЗ рд╣реИрдВред рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП - PHP рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреБрд░реЛрдз / рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдЗрд╕рдХреЗ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдпреЛрдЬрдирд╛ рдореЗрдВред рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрдХрд▓рд┐рдд рдирд┐рдЬреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ рд╣реИред
рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ "рдХреБрдЫ рддреИрдпрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдпрд╛ "рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд▓рд┐рдЦреЗрдВ" рд╕реНрдкрд╖реНрдЯ рд╣реИред
рдИрдЬрд╝реА JSON-RPC 2.0
GitHub рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ред рдкрд╣рд▓реЗ рдмрддрд╛рдИ рдЧрдИ рд╕рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рд╣реИрдВ :)
рд╕рд░реНрд╡рд░
рджреЛ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ: рдпрд╛ рддреЛ BaseJsonRpcServer рд╡рд░реНрдЧ рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдВ, рдпрд╛ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВ рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВ:
<?php include 'BaseJsonRpcServer.php'; include 'tests/lib/DateTimeRpcService.php';
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ DateTimeRpcService рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ред SMD рд╕реНрдХреАрдо
smd GET рдкреИрд░рд╛рдореАрдЯрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
ezyjsonrpc / example-server.php? Smd ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╕рдордп, phpDoc рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рд╕рд░реНрдХрд┐рдЯ рд╣реИ ... {"transport":"POST","envelope":"JSON-RPC-2.0","SMDVersion":"2.0","contentType":"application\/json","target":"\/example-server.php","services":{"GetTime":{"parameters":[{"name":"timezone","optional":true,"type":"string","default":"UTC"},{"name":"format","optional":true,"type":"string","default":"c"}],"description":"Get Current Time","returns":{"type":"string"}},"GetTimeZones":{"parameters":[],"description":"Returns associative array containing dst, offset and the timezone name","returns":{"type":"array"}},"GetRelativeTime":{"parameters":[{"name":"text","optional":false,"type":"string","description":"a date\/time string\r"},{"name":"timezone","optional":true,"type":"string","default":"UTC"},{"name":"format","optional":true,"type":"string","default":"c"}],"description":"Get Relative time","returns":{"type":"string"}},"Implode":{"parameters":[{"name":"glue","optional":false,"type":"string"},{"name":"pieces","optional":true,"type":"array","default":["1","2","3"]}],"description":"Implode Function","returns":{"type":"string","description":"string"}}},"description":"Simple Date Time Service"}
рдЧреНрд░рд╛рд╣рдХ
рдлрд┐рд░ рд╕реЗ рджреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧ рд╣реИрдВ: рдпрд╛ рддреЛ BaseJsonRpcClient рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╡реЗрдм рд╕реЗрд╡рд╛ рд▓рд┐рдВрдХ рдкрд╛рд╕ рдХрд░реЗрдВ, рдпрд╛ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
<?php include 'BaseJsonRpcClient.php'; $client = new BaseJsonRpcClient( 'http://eazyjsonrpc/example-server.php' ); $result = $client->GetRelativeTime( 'yesterday' );
рдЬрдирдХ
рдПрд╕рдПрдордбреА рдпреЛрдЬрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ
DateTimeServiceClient.php )ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдирд░реЗрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ:
php JsonRpcClientGenerator.php http://eazyjsonrpc/example-server.php?smd DateTimeServiceClient
рдХрдорд╛рдВрдб рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ DateTimeServiceClient.php рдлрд╝рд╛рдЗрд▓ рд╣реЛрдЧрд╛ред
рдорд░рд╣рдо рдореЗрдВ рдЙрдбрд╝рдирд╛
JSON-RPC рдореЗрдВ
рдХреЙрд▓рд┐рдВрдЧ рдХреНрд▓рд╛рд╕- > рдореЗрдердб () рдХреЗ рд▓рд┐рдП рдПрдХ
рдЕрдирд╕реНрдкреЛрдХ рдирд┐рдпрдо рдХреНрд▓рд╛рд╕рдореИрдереЛрдб рдХреЛ рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо (рдбреЙрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред
рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдРрд╕реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ url рдПрдХ рдирд┐рд░реНрдпрд╛рддрд┐рдд рд╡рд░реНрдЧ рд╣реИ, рдлрд┐рд░ рдмрд┐рдВрджреАрджрд╛рд░ рд╡рд┐рдХрд▓реНрдк рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ :)ред рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рдЖрдк рд╣рдореЗрд╢рд╛ рдпрд╣рд╛рдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд╕рд┐рд░реНрдл PHP рд╣реИред
рдПрд╕рдПрдордбреА рдореЗрдВ рднреА рдЙрдирдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рдЗрд╕ рдХреНрд╖рдг рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред
рдЬреЛ рд▓реЛрдЧ рд╡рд┐рд╕реНрддреГрдд рджрд╕реНрддрд╛рд╡реЗрдЬ рдвреВрдВрдврдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдореИрдВ рддрд░реАрдХреЛрдВ рдХреЗ рдирд╛рдо, phpDoc рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рд╕рд░реНрд╡рд░ рдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВред
рдЬреАрд╡рди рд╣реИрдХ
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реИ?
рдХрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
- HTTP рдмреЗрд╕рд┐рдХ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ, $ CurlOptions array рдореЗрдВ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдЬреЛрдбрд╝реЗрдВ :)
- HTTP рд╣реЗрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдзрд┐ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
- рд╡рд┐рдзрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рдХреБрдЫ рд▓реЛрдЧ рдмреЗрд╕ 64 рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдФрд░ рдХреБрдЫ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рднреЗрдЬрдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЬреАрдм рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕ рдкрддреЗ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг --> {"jsonrpc": "2.0", "method": "send_image", "params": ..., "id": 1} <-- {"jsonrpc": "2.0", "result": {"URL": "/exampleurl?id=12345", "maxsize": 10000000, "accepted-format":["jpg", "png"]}, "id": 1} --> . , --> {"jsonrpc": "2.0", "method": "send_done", "params": {"checksum": "1a5e8f13"}, "id": 2} <-- {"jsonrpc": "2.0", "result": "ok"}
рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реА
рдХреЛрдб ,
рд╕рдВрджреЗрд╢ рдФрд░
рдбреЗрдЯрд╛ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде
рддреНрд░реБрдЯрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред BaseJsonRpcServer рдирд╛рдордХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ
рдХреЛрдб рдФрд░
рдбреЗрдЯрд╛ рдкрд╛рд╕
рдХрд░рдирд╛ рд╣реИ ред рдЖрдк рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ
рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ
рд╕рдВрджреЗрд╢ рдХреЛ $ errorMessages рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ
рдпрд╣ рд╕рдм рдкреВрд░реА рддрд░рд╣ рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдХреБрдЫ рд╡рд░реНрдЧ
ObjectToJsonConverter рдмрдирд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддрд╛
рд╣реВрдВ , рдЬрд┐рд╕рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╕рд░рдгреА рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЙрджрд╛рд╣рд░рдг <?php class ObjectToJsonConverter { public static function GetCity( City $city ) { return array( 'id' => $city->cityId , 'name' => $city->title , 'region' => $city->region->title ); } }
рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░реЗрдВ
рдлрд┐рд░, рдпрд╣ рд╕рдм рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЖрд╡рд╢реНрдпрдХ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рд╕рд░рд▓ рдХрдирд╡рд░реНрдЯрд░ рд╡рд╛рдкрд╕ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ (рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░
MyShowsClient.php рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)
рдирд┐рд╖реНрдХрд░реНрд╖
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, JSON-RPC рдПрдХ рдЗрдВрдЯрд░реЗрдХреНрд╢рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╕рдордп рдзреНрдпрд╛рди рд╕реЗ рд╡рдВрдЪрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ 89% рдХреЛрдб рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА, рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ: "рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ" :)