Test_endpoint nasıl oluşturulur?


29

Drupal'da yeniyim ve REST ve RESTWS modülünü kullanmak için hizmetler modülünü kullanıyorum. RESTWS kullandım ve düğümün içeriğini http: //base_url/node/1.xml ile alabiliyorum ve şimdi drupal'a harici PHP uygulamamdan bir düğüm ve kullanıcı eklemem gerekiyor. Google'a gittim ve burada http: // base_drupal_url / drupal7 / test_endpoint / users kullanmamız gerektiğini öğrendim . Drupal 7'den bir hizmet yaratmaya çalıştım, ancak bitiş noktası başlığı, ad ve bitiş noktası yolunda ne vermem gerektiğini bilmiyorum ve aynı bitiş noktası yolunu kıvrımda vermem gerektiğini düşünüyorum.

Dinlenme sunucusunun kurulup kurulmadığını ve uç nokta yolunun nasıl oluşturulduğunu kontrol etmek için yapılacak herhangi bir yardım çok yardımcı olacaktır.

Servis modülü hizmetleri-7.x-3.0-rc3 ile Drupal 7 kullanıyorum


Sorunu çözdün mü? Tam olarak sizin gibi bir uç nokta ve kaynak yolu oluşturdum ancak alıyorum "İstenilen URL / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node bu sunucuda bulunamadı." hata. Lütfen yorumumu en yüksek oyu alan cevapla kontrol edin. Bunun için bir çözüm varsa bana bildirin.
Raj Pawan Gumdal

Yanıtlar:


56

Servisler modülünün kullanımı kolaydır, ancak özellikle konseptte yeniyseniz, yapılandırılması zor olabilir. Bu yüzden, "Drupal Cevaplar" kullanıcıları için Servis modüllerinin konfigürasyonunu kolaylaştırmak için ekran görüntüleri göndereceğim.

Makinemde yüklü olan Hizmetler modülünün sürümü aşağıdadır:

görüntü tanımını buraya girin

Aşağıda gösterildiği gibi 'rest' adlı bir bitiş noktası oluşturun:

görüntü tanımını buraya girin

Sunucu türünü ve bitiş noktası yolunu seçin:

görüntü tanımını buraya girin

Etkinleştirmek ve takma adları belirlemek istediğiniz kaynakların listesini seçin:

görüntü tanımını buraya girin

Yanıt formatlayıcılarını seçin ve etkinleştirmek istediğiniz ayrıştırıcıları isteyin:

görüntü tanımını buraya girin

Yapılandırmanızı aşağıda gösterildiği gibi test edebilirsiniz:

görüntü tanımını buraya girin

Tüm düğümlerin listesini aşağıdaki gibi alabilirsiniz:

görüntü tanımını buraya girin

Ve belirli bir düğüm olarak:

görüntü tanımını buraya girin

Tarafından sağlanan mükemmel örnekler komut aşağıda MichaelCole burada http://drupal.org/node/910598#comment-4677738 herhangi bir dış PHP uygulamadan düğümleri oluşturun.

Bu cevabın tamlığı için kodunu kopyalıyorum.

//--------------login to the server------------------------
$service_url = 'http://example.dev/rest/user/login.xml'; // .xml asks for xml data in response
$post_data = array(
    'username' => 'test',
    'password' => 'test',
);
$post_data = http_build_query($post_data, '', '&'); // Format post data as application/x-www-form-urlencoded
// set up the request
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  // have curl_exec return a string

curl_setopt($curl, CURLOPT_POST, true);             // do a POST
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); // POST this data
// make the request
curl_setopt($curl, CURLOPT_VERBOSE, true); // output to command line
$response = curl_exec($curl);
curl_close($curl);
print "LOGIN RESPONSE:\n";
var_dump($response);



// parse the response
$xml = new SimpleXMLElement($response);
$session_cookie = $xml->session_name . '=' . $xml->sessid;
// print "SESSION_COOKIE: $session_cookie";

file_put_contents('session_cookie.txt', $session_cookie);

//----------------create a node -------------------------------

$node_data = array(
    'type' => 'ct_metadata_core',
    'title' => 'test layer',
    'field_core_lat_n[und][0]' => array('value' => '90'),
    'field_core_lat_s[und][0]' => array('value' => '-90'),
    'field_core_long_e[und][0]' => array('value' => '180'),
    'field_core_long_w[und][0]' => array('value' => '-180'),
    'field_core_description[und][0]' => array('value' => 'National Data Buoy Center'),
    'field_core_originator[und][0]' => array('value' => 'NDBC'),
    'field_core_url[und][0]' => array('url' => 'http://www.ndbc.noaa.gov/kml/marineobs_as_kml.php?sort=pgm'),
    'field_cont_res_name_org[und][0]' => array('value' => 'test'),

);


$service_url = 'http://example.dev/rest/node'; // .xml asks for xml data in response
$session_cookie = file_get_contents('session_cookie.txt');

$node_data = http_build_query($node_data, '', '&'); // Format post data as application/x-www-form-urlencoded
// set up the request
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  // have curl_exec return a string

curl_setopt($curl, CURLOPT_COOKIE, "$session_cookie"); // use the previously saved session

curl_setopt($curl, CURLOPT_POST, true);             // do a POST
curl_setopt($curl, CURLOPT_POSTFIELDS, $node_data); // POST this data
// make the request
curl_setopt($curl, CURLOPT_VERBOSE, true); // output to command line
$response = curl_exec($curl);
curl_close($curl);
print "CREATE NODE RESPONSE:\n";
var_dump($response);


//----------------logout from the server-------------------------

$service_url = 'http://example.dev/rest/user/logout';
$session_cookie = file_get_contents('session_cookie.txt');

// set up the request
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  // have curl_exec return a string

curl_setopt($curl, CURLOPT_COOKIE, "$session_cookie"); // use the previously saved session
curl_setopt($curl, CURLOPT_POST, true);             // do a POST
curl_setopt($curl, CURLOPT_POSTFIELDS, ""); // POST this data
// make the request
curl_setopt($curl, CURLOPT_VERBOSE, true); // output to command line
$response = curl_exec($curl);
curl_close($curl);
print "LOGOUT RESPONSE:\n";
var_dump($response);

2
Her istek ayrıştırma seçeneğini etkinleştirdiğini belirtmeye değer . Varsayılan olarak "application / x-www-form-urlencoded" komutunun devre dışı bırakıldığını fark etmeden önce çok zaman harcadım.
nisan

Yukarıdaki kod parçacığını nereye yazmam gerekir? Modüller / hizmetler / sunucu / rest_server / lib içinde mi?
subhojit777

1
@ subhojit777 yukarıdaki kod, harici bir sunucuda barındırılan hizmetleri api'yi tüketmek için kullanılabilecek tek başına bir PHP kod pasajıdır ve bunu modül modülünüze yazabilirsiniz, ancak modül / servis / sunucu / rest_server / lib 'e yazmak muhtemelen. En iyi yer değil.
Ajinkya Kulkarni

Yerel ana bilgisayarımda söylediğin gibi her şeyi ayarlarım. Drupal siteme çalışan bir yolum var: localhost / ~ DrupalWorkstation / Drupal / drupal_7_16 . URL'nin üstüne çıktığımda index.php sayfası çalışıyor, ancak yapılandırılmış uç noktam ve kaynak yolum işe yaramadı. Hizmeti tetikleyen URL’m : localhost / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node . Aşağıdaki hatayı alıyorum: "İstenmeyen URL / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node bu sunucuda bulunamadı." Bu sorunun nasıl çözüleceğine dair herhangi bir öneriniz var mı?
Raj Pawan Gumdal

1
Arigato gozaimasu Ajinkya sensei. ARIGATO !!!
TheEYL

6

Services 3.x için kaynak oluşturma bölümünü okumanızı öneririm .

Ayrıca, Servisler ve RESTWS'in uyumlu olup olmadığından eminim; her ikisi de aynı şeyin varyasyonlarını sunar ve bu nedenle çatışma olabilir.


Servis ekleme seçeneğindeki uç nokta yolunda drupal 7
sridhar

php uygulamamdan bir düğüm oluşturmak için drupal'da herhangi bir özel kod yazmalı mıyım?
sridhar

Hizmetler kullanılabilecek kaynaklarda inşa etti. RestWS ve uyumluluk ile ilgili olarak: RestWS bakım sağlayıcıları tarafından reddedilen bir RestWS Servisleri limanı vardır. Eğer ilgilenen varsa, ayrı bir modül olarak yayınlanabilir.
VoxPelli
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.