Основы SOAP, используемые с PHP - PullRequest
0 голосов
/ 14 июня 2011

Я знаю, что не основная идея этого сайта - отвечать на подобные вопросы, но через пару дней у меня будет возможность подать заявку на младшую (или, может быть, более правильно, стажера) должность программиста на PHP и вот почему я решил опубликовать здесь, в надежде, что это будет хорошо. Компания в некотором роде большая по сравнению с другими здесь, поэтому хорошо известно, что такое экзамен для людей, желающих попасть на эту должность - это либо - написание сценария нумерации страниц, либо какой-то сервис SOAP. У меня нет проблем с нумерацией страниц. , но с тех пор я никогда не обращал слишком много внимания на SOAP, и теперь мне нужно изучить основы службы SOAP при использовании с PHP. Предоставляя позицию, на которую я претендую, никто не ожидает, чтобы показать что-то блестящее, но мне все еще нужны базовые понимание клиентских и серверных сервисов SOAP, может быть, я пока не буду беспокоиться о WSDL, так как не думаю, что у меня достаточно времени для всего. Итак, у меня есть пример кода, который, скорее всего, мне нужно будет написать и объяснить, если я буду писать сервис SOAP:

Клиентская сторона -

<code><?php

if (isset($_REQUEST["cname"]) && isset($_REQUEST["cpass"])) 
{
  $cname = $_REQUEST["cname"];
  $md5pass = md5( $_REQUEST["cpass"]);

  $client = new SoapClient(null, array(
      'location' => "http://localhost/test/BuildInSoapWithWSDL/server.php",
      'uri'      => "urn://localhost/test/BuildInSoapWithWSDL/",
      'trace'    => 1 ));
  try 
  {

        if ( $client->saveUserNameAndPass($cname, $md5pass)) 
           {echo "Data updated!";} 
    else 
      {echo "Error updating data!";}

        print "<pre>\n";
    print "Request :\n".htmlspecialchars($client->__getLastRequest()) ."\n";
    print "Response:\n".htmlspecialchars($client->__getLastResponse())."\n";
    print "
"; } поймать (исключение $ e) { echo 'Exception:', $ e-> getMessage (), "\ n"; } } еще { эхо "Ошибка!"; } ?>

сторона сервера -

<?php

$server = new SoapServer(null, array('uri' => 'urn://localhost/test/BuildInSoapWithoutWSDL/'));
$server->addFunction("saveUserNameAndPass");
$server->handle();

function database_connect($host, $account, $password, $dbname)
{
  $connect = mysql_connect($host, $account, $password);
  $connect = mysql_select_db($dbname, $connect);
  return $connect;
}

function saveUserNameAndPass($userName,$passWord) 
{
   try 
   {
      if (database_connect("localhost", "saveuser", "123456", "savetask") == 1)
      {
        $userName = mysql_real_escape_string($userName);
        $sql = "INSERT INTO accounts (name,passmd5) VALUES ('".$userName."','".$passWord."')";
        $result = mysql_query($sql);
        mysql_close();
        if ($result) 
          { return true;}
        else
          { return false;}
      }
      else
      { 
          return false; 
      }
   }
   catch (Exception $e) 
   {
     return false;
   }
}
?>

Даже если у меня есть код, я все еще плохо знаю, что делать. Так что мне нужно некоторое объяснение основ при написании SOAP-сервиса, и если это topci не подходит для обсуждения здесь, я был бы признателен за любой источник, где эти все объясняется с точки зрения начинающего.

Спасибо

1 Ответ

0 голосов
/ 14 июня 2011

SOAP используется точно так же, как вы взаимодействуете с базой данных MySQL.Я могу привести пример из реальной жизни для соединений с веб-приложением Atlassian JIRA .

Сначала вы просто устанавливаете соединение.Вам понадобится файл WSDL, который содержит все содержимое, содержащее все функции, которые позволяет вам выполнять этот конкретный SOAP-сервер:

try { $soapObject = new SoapClient('http://jira/rpc/soap/jirasoapservice-v2?wsdl'); }
catch(Exception $ex) { die('SOAP connection failed: '$ex->getMessage()); }

После установления соединения вы просто используете Это.Если необходимо, войдите в систему:

$authToken = $soapObject->login(JIRA_LOGIN, JIRA_PASS);

Затем отправьте запросы на сервер:

$jqlquery = "status not in (Closed,Resolved) and assignee = user");
try { $issues = $soapObject->getIssuesFromJqlSearch($authToken, $jqlquery, 20); }
catch(Exception $ex) { die('JIRA query failed: '$ex->getMessage()); }

Работа над результатами:

foreach ($issues as $k => $v) { $users[$v->reporter] = array('fullname'=>$soapObject->getUser($authToken,$v->reporter)->fullname,'name'=>$v->reporter); }
$project = $soapObject->getProjectByKey($authToken,"PROJECT");

Обратите внимание, что getIssuesFromJqlSearch, getUser,getProjectByKey и другие, являются командами, специфичными для приложения (в этом случае все методы / функции описаны в документации плагина JIRA RPC ).

Вот и все.Вам не нужно «отключаться», afaik, когда загрузка заканчивается, вызывается деструктор, который сам закрывает соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...