Project

General

Profile

Rest api with php » History » Version 9

Robert Nürnberg, 2011-10-05 12:31

1 1 Jean-Philippe Lang
h1. Using the REST API with PHP
2
3 2 Jean-Philippe Lang
Here is an example that uses "PHP ActiveResource":http://wiki.github.com/lux/phpactiveresource/, a lightweight PHP library that can be used to access Rails' REST APIs:
4 1 Jean-Philippe Lang
5
<pre>
6 3 Azamat Hackimov
<code class="php">
7 1 Jean-Philippe Lang
<?php
8
require_once ('ActiveResource.php');
9
10
class Issue extends ActiveResource {
11
    var $site = 'http://username:password@192.168.199.129:3000/';
12
    var $request_format = 'xml'; // REQUIRED!
13
}
14
15
// create a new issue
16
$issue = new Issue (array ('subject' => 'XML REST API', 'project_id' => '1'));
17
$issue->save ();
18 2 Jean-Philippe Lang
echo $issue->id;
19 1 Jean-Philippe Lang
20
// find issues
21
$issues = $issue->find ('all');
22
for ($i=0; $i < count($issues); $i++) {
23
	echo $issues[$i]->subject;
24
}
25
26
// find and update an issue
27
$issue->find (1);
28
echo $issue->subject;
29
$issue->set ('subject', 'This is the new subject')->save ();
30
31
// delete an issue
32
$issue->find (1);
33
$issue->destroy ();
34
?>
35 3 Azamat Hackimov
</code>
36 1 Jean-Philippe Lang
</pre>
37 8 B Brey
38
*Known issues*
39
40
If you are working with large descriptions the webserver can return a 417 error (Bad Expectation).
41
You should replace line 381 in ActiveResource.php with the following code:
42
43
<pre>curl_setopt ($ch, CURLOPT_HTTPHEADER, array ('Expect:',"Content-Type: text/xml", "Length: " . strlen ($params)));</pre>
44 9 Robert Nürnberg
45
*2011-10-05:*
46
If you are trying to use the class to write time_entries, you will get a 404 response. The reasone is, that the class is unable to create the correct singular form from the pluralized version of the entitiy name. this can be patched by
47
48
# adding the class var <code class="php">protected $sOriginalElementName = '';</code>
49
# changing the constructor to set the class var using the original entity name before the pluralization is called: 
50
<code class="php">
51
function __construct ($data = array ()) {
52
  $this->_data = $data;
53
54
  // add this line here - to store the original name of the entity
55
  $this->sOriginalElementName = ($this->element_name ? $this->element_name : strtolower (get_class ($this)));
56
  // Allow class-defined element name or use class name if not defined
57
  $this->element_name = ($this->element_name ? $this->pleuralize ($this->element_name) : $this->pleuralize (strtolower (get_class ($this))));
58
...
59
</code>
60
# and then Changing the Method _send_and_receive to use sOriginalElementName instead of substr ($this->element_name, 0, -1);
61
<code class="php">
62
function _send_and_receive ($url, $method, $data = array ()) {
63
  $params = '';
64
  $el = $this->sOriginalElementName;//substr ($this->element_name, 0, -1);
65
  if ($this->request_format == 'url') {
66
...
67
</code>