{}const=>[]async()letfn</>var
開発1C

外部サービスとの1C統合:REST、SOAP、JSON、API—初心者向け完全ガイド

APIを介して任意のサービスを接続する方法を学びましょう!最初のリクエストから完全な統合まで、コードを使用した実際の例でREST、SOAP、JSONを分析します。この記事を読むと、為替レートの取得、注文のダウンロード、システム間のデータの同期が可能になります。

К

Kodik

著者

3分で読める

現代のビジネスプロセスは、単独で動作することはめったにありません。1C会計システムは、サイト、CRMシステム、配送サービス、銀行、その他の数十のサービスとデータを交換する必要があります。そのために、システム同士が通信できるようにするAPI(プログラムインターフェース)が使用されます。これがどのように機能し、1C で統合の作成を開始する方法を理解しましょう。

API とは何ですか?なぜ必要ですか?

API(アプリケーションプログラミングインターフェイス)は、あるプログラムが別のプログラムからデータまたは機能を要求できるようにするためのルールのセットです。レストランに入ったと想像してみてください。自分で料理するためにキッチンに行くのではなく、ウェイターに注文したいものを伝え、ウェイターが注文をキッチンに渡し、出来上がった料理を運んできます。APIはこのウェイターのように機能します。リクエストを受け取り、処理し、結果を返します。

1C統合の典型的なタスク:

  • オンラインストアからの注文の読み込み

  • 銀行への書類の送付

  • 為替レートの取得

  • CRMシステムとの同期

  • 配送サービスへのデータ送信

  • 外部データベースから取引先に関する情報を取得する

🔥 10万人以上の学生が参加中

理論を読むのに疲れた?
コーディングの時間だ!

Kodik — 実践でプログラミングを学ぶアプリ。AIメンター、インタラクティブなレッスン、実際のプロジェクト。

🤖 AI 24時間
🎓 修了証
💰 無料
🚀 始める
今日参加

RESTとSOAP:APIを作成するための2つのアプローチ

SOAP — 従来のアプローチ

SOAP(Simple Object Access Protocol)は、90年代後半に登場したデータ交換プロトコルです。メッセージの送信にXMLを使用し、厳格な構造を持っています。

SOAPリクエストの例:

<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetClientInfo xmlns="http://example.com/">
      <ClientID>12345</ClientID>
    </GetClientInfo>
  </soap:Body>
</soap:Envelope>

SOAPサービスは、利用可能なメソッド、パラメーター、データ型に関するすべての情報を含む特別なファイルであるWSDL(Web Services Description Language)を使用して記述されます。これは、APIの使用に関する詳細な手順のようなものです。

SOAPの利点:

  • 厳格な型指定とデータ検証

  • 組み込みのセキュリティサポート

  • 複雑な操作とトランザクションのサポート

  • 標準化されたエラー処理

SOAPの欠点:

  • XMLが大きいと、送信されるデータのサイズが大きくなります

  • 習得と設定がより困難

  • XML処理のために動作が遅くなります

RESTは現代の標準です

REST(Representational State Transfer)は、標準のHTTPメソッドを使用するアーキテクチャスタイルです。RESTはSOAPよりもシンプルで、軽く、高速に動作します。

RESTの主なHTTPメソッド:

  • GET — データを取得する

  • POST — 新しいエントリーを作成する

  • PUT — 既存のエントリを更新する

  • DELETE — 記録を削除する

RESTリクエストの例(クライアントに関する情報の取得):

GET https://api.example.com/clients/12345

RESTの利点:

  • 使いやすさ

  • 迅速な作業

  • コンパクトなデータ(通常はJSON)

  • ブラウザまたはPostmanを介して簡単にテストできます

RESTの欠点:

  • 標準化が少ない(各APIは独自の方法で構成できる)

  • 複雑な操作のサポートは組み込まれていません

JSON — データ交換言語

JSON(JavaScript Object Notation)は、構造化データを送信するためのテキスト形式です。シンプルで読みやすいことから、REST APIの標準になりました。

JSONデータの例:

{
  "clientId": "12345",
  "name": "Romashka LLC",
  "inn": "7701234567",
  "contacts": {
    "phone": "+7 495 123-45-67",
    "email": "info@romashka.ru"
  },
  "orders": [
    {
      "id": "ORD-001",
      "date": "2024-12-01",
      "amount": 45000
    }
  ]
}

JSONは人間が読みやすく、ソフトウェアで簡単に処理できます。1Cには、JSONを操作するための組み込みツールがあります。

1C での HTTP リクエストの処理

1CのAPIを介してデータを送受信するには、HTTPСоединениеおよびHTTPЗапросオブジェクトを使用します。

シンプルな GET リクエスト

// サーバーへの接続を確立しています
Соединение = Новый HTTPСоединение(
    "api.example.com",  // サーバーアドレス
    443,                // ポート(HTTPSの場合は443)
    ,                   // ログイン
    ,                   // パスワード
    ,                   // プロキシ
    30,                 // タイムアウト(秒)
    Новый ЗащищенноеСоединениеOpenSSL() // HTTPS用
);

// リクエストを作成する
Запрос = Новый HTTPЗапрос("/clients/12345");

// リクエストを送信して応答を受け取ります
Ответ = Соединение.Получить(Запрос);

// 応答コードを確認しています
Если Ответ.КодСостояния = 200 Тогда
    ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
    Сообщить(ТелоОтвета);
Иначе
    Сообщить("Error: " + Ответ.КодСостояния);
КонецЕсли;

JSONデータを含むPOSTリクエスト

// データを準備しています
ДанныеJSON = Новый Структура;
ДанныеJSON.Вставить("name", "Vasilyok LLC");
ДанныеJSON.Вставить("inn", "7702345678");

// JSONに変換します
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеJSON);
СтрокаJSON = ЗаписьJSON.Закрыть();

// リクエストを作成する
Запрос = Новый HTTPЗапрос("/clients");
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.УстановитьТелоИзСтроки(СтрокаJSON);

// 送信中
Соединение = Новый HTTPСоединение("api.example.com", 443, , , , 30,
    Новый ЗащищенноеСоединениеOpenSSL());
Ответ = Соединение.ОтправитьДляОбработки(Запрос);

// 回答を処理しています
Если Ответ.КодСостояния = 201 Тогда
    Сообщить("Customer successfully created");
КонецЕсли;

1C での JSON の解析

JSON を読み込むには、ЧтениеJSON を使用します。

СтрокаJSON = Ответ.ПолучитьТелоКакСтроку();

ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);

Данные = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();

// これでデータにアクセスできます
Имя = Данные["name"];
ИНН = Данные["inn"];
Телефон = Данные["contacts"]["phone"];

JSON構造が事前にわかっている場合は、構造への逆シリアル化を使用できます。

ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);

Данные = ПрочитатьJSON(ЧтениеJSON, Истина); // 真実=構造を読む
ЧтениеJSON.Закрыть();

API での認証

ほとんどのAPIは認証を必要とします。主な方法:

Basic Authentication

ログインとパスワードはヘッダーで送信されます。

Запрос = Новый HTTPЗапрос("/api/data");

Логин = "user";
Пароль = "password";
СтрокаАвторизации = Base64Строка(Логин + ":" + Пароль);

Запрос.Заголовки.Вставить("Authorization", "Basic " + СтрокаАвторизации);

API Key

特別なキーは、ヘッダーまたはパラメーターで渡されます。

Запрос = Новый HTTPЗапрос("/api/data");
Запрос.Заголовки.Вставить("X-API-Key", "your_secret_key");

Bearer Token (OAuth)

アクセストークンは個別のリクエストによって取得されます。

Запрос = Новый HTTPЗапрос("/api/data");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);

エラー処理

常にエラー処理を考慮する必要があります。

Попытка
    Ответ = Соединение.Получить(Запрос);
    
    Если Ответ.КодСостояния = 200 Тогда
        // リクエストが成功しました
        Данные = ПолучитьДанныеИзОтвета(Ответ);
    ИначеЕсли Ответ.КодСостояния = 404 Тогда
        ВызватьИсключение("Resource not found");
    ИначеЕсли Ответ.КодСостояния = 401 Тогда
        ВызватьИсключение("Authorization error");
    Иначе
        ВызватьИсключение("Server error: " + Ответ.КодСостояния);
    КонецЕсли;
    
Исключение
    Сообщить("Error while working with API: " + ОписаниеОшибки());
    ЗаписьЖурналаРегистрации("Integration.API", 
        УровеньЖурналаРегистрации.Ошибка,
        ,
        ,
        ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())
    );
КонецПопытки;

1C での SOAP の操作

SOAPサービスを操作するために、1CはWSDLに基づいてオブジェクトを自動的に作成できます。

// WSDL による SOAP サービスの定義
Попытка
    WSОпределения = Новый WSОпределения(
        "http://example.com/service?wsdl",
        "Login",
        "Password"
    );
    
    // サービスを操作するためのプロキシを作成します
    WSПрокси = Новый WSПрокси(WSОпределения, 
        "ServiceNamespace",
        "ServiceName");
    
    // サービス メソッドを呼び出します
    Результат = WSПрокси.GetClientInfo("12345");
    
Исключение
    Сообщить("Error while working with SOAP: " + ОписаниеОшибки());
КонецПопытки;

実用的なアドバイス

アドレスとキーには定数を使用します。 URLとAPIキーをコードに直接保存しないでください。定数または設定に移動してください。これにより、接続パラメータの変更が簡単になります。

すべてのトランザクションをログに記録します。 外部APIへのすべての呼び出し(要求、応答、エラー)を記録します。これはデバッグに役立ちます。

タイムアウトを処理します。 外部サービスが利用できないか、応答が遅い場合があります。妥当なタイムアウトを設定し、サービスが応答しない状況を適切に処理します。

Postmanを使用してテストします。 1C でコードを記述する前に、Postman または同様のツールを使用して API をテストしてください。これにより、リクエストと応答の構造を理解するのに役立ちます。

APIの制限を考慮してください。 多くのサービスでは、時間単位でのリクエスト数が制限されています。呼び出し頻度を制限するメカニズムを用意してください。

非同期処理を使用します。 一括操作の場合は、ユーザーの作業を妨げないように、バックグラウンドジョブを使用することをお勧めします。

実際の統合の例

ロシア中央銀行のウェブサイトから為替レートを取得するための簡単な統合を作成します。

Функция ПолучитьКурсВалюты(КодВалюты, Дата)
    
    СтрокаДаты = Формат(Дата, "DF=dd.MM.yyyy");
    
    Соединение = Новый HTTPСоединение("www.cbr.ru", 443, , , , 30,
        Новый ЗащищенноеСоединениеOpenSSL());
    
    Запрос = Новый HTTPЗапрос("/scripts/XML_daily.asp?date_req=" + СтрокаДаты);
    
    Попытка
        Ответ = Соединение.Получить(Запрос);
        
        Если Ответ.КодСостояния = 200 Тогда
            ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
            
            // XMLを解析する
            Чтение = Новый ЧтениеXML;
            Чтение.УстановитьСтроку(ТелоОтвета);
            
            Пока Чтение.Прочитать() Цикл
                Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента
                    И Чтение.Имя = "Valute" Тогда
                    
                    ТекКод = "";
                    ТекКурс = 0;
                    
                    Пока Чтение.ПрочитатьАтрибут() Цикл
                        Если Чтение.Имя = "ID" И Чтение.Значение = КодВалюты Тогда
                            // 必要な通貨を見つけたら、レートを読みます
                            Пока Чтение.Прочитать() Цикл
                                Если Чтение.Имя = "Value" Тогда
                                    Чтение.Прочитать();
                                    СтрокаКурса = СтрЗаменить(Чтение.Значение, ",", ".");
                                    Возврат Число(СтрокаКурса);
                                КонецЕсли;
                            КонецЦикла;
                        КонецЕсли;
                    КонецЦикла;
                КонецЕсли;
            КонецЦикла;
            
            Чтение.Закрыть();
        КонецЕсли;
        
    Исключение
        Сообщить("Error getting the rate: " + ОписаниеОшибки());
        Возврат 0;
    КонецПопытки;
    
    Возврат 0;
    
КонецФункции

// 使用
Курс = ПолучитьКурсВалюты("R01235", ТекущаяДата()); // USD
Сообщить("Dollar exchange rate: " + Курс);

結論

外部サービスとの統合は、1Cにおける現代の開発の重要な部分です。JSON を使用した REST API は、そのシンプルさと効率性により標準化されていますが、SOAP は企業システムで引き続き使用されています。単純なGETリクエストから始めて、POST、PUT、認証、エラー処理など、より複雑なスクリプトに徐々に移行することをお勧めします。

HTTP、JSON、APIの基本原則を習得すると、オンラインストアから銀行システムまで、ほぼすべての最新サービスに1Cを接続できます。

学習を続けてください!

このトピックやその他の多くのトピックを学ぶことができます コディケ — 実践的な例と実際のタスクを使用してプログラミングを学ぶためのプラットフォーム。

そして、私たちは素晴らしい テレグラムチャンネル フレンドリーな開発者コミュニティで、質問をしたり、経験を共有したり、新しい資料を知ることができます!

🎯先延ばしをやめよう

記事は気に入った?
実践の時間だ!

Kodikでは読むだけでなく、すぐにコードを書く。理論 + 実践 = 本当のスキル。

即座に実践
🧠AIがコードを説明
🏆修了証

登録不要 • カード不要