JavaScript kullanarak bir REST hizmeti çağırma
Bir hizmet akışındaki komut dosyası görevinden REST hizmetini çağırma Bu, bir hizmet akışında bir hizmet görevinin somutlaması olarak seçilemeyen hizmet işlemlerini çağırmanızı sağlar.
Bu görev hakkında
Yordam
- REST hizmetini çağırmak için gerekli çağırma kimlik bilgileri ve REST hizmeti için OpenAPI (eski adıyla Swagger) belirtim dosyasının URL 'sine ya da yerel bir kopyasına sahip olduğunuzdan emin olun.
- Bir dış hizmet oluşturun ve hangi işlemlerin desteklendiğini keşfedin:
- Tasarımcı uygulamasını açın ve Hizmetler > + > Dış Hizmet > Var olan bir hizmeti keşfedinseçeneğini belirleyin ve giriş olarak OpenAPI belirtim dosyasını seçin. Dış REST hizmetinin keşfedilmesiyle ilgili daha fazla bilgi için REST hizmetini Başlatmabaşlıklı konuya bakın.
- Keşfedilen işlemlerden herhangi biri bir hizmet görevinden çağrılamıyorsa, ek bilgi için Açıklamayı görüntüle düğmesini tıklatabilirsiniz. Çağırmak istediğiniz keşfedilen hizmet işlemi, bir hizmet akışındaki bir hizmet görevinin somutlaması olarak seçilebilir; bu daha basittir.
application/json(ya daapplication/x-www-form-urlencodedilkel değerlerle ya da ilkel değerlerle dizilerle ya datext/plainşema tipi dizgiyle) dışındaki tipleri kullanmak istiyorsanız, hizmeti çağırmak için JavaScript API 'sini kullanmanız gerekir. - Çağırmak istediğiniz REST hizmeti hakkında işlem adı, parametreler (üstbilgiler dahil), güvenlik gereksinimleri ve yanıt nesnesi yapısı gibi gerekli bilgileri bulmak için, OpenAPI belirtim kaynağını görüntülemek üzere Dış hizmet ' in Kaynak sekmesini tıklatın.Hizmet hakkında diğer bilgiler için dış hizmete ilişkin REST sunucusu yapılandırmasına bakın.
- Çağırmak istediğiniz REST hizmetine ilişkin sunucu sertifikasını denetleyin.JavaScript kullanarak REST sunucusunun bir parçası olarak belirtilen herhangi bir SSL yapılandırmasını geçersiz kılabilirsiniz.
- Sunucu sertifikası bir genel sertifika yetkilisi tarafından imzalandıysa,
PublicInternetSSLSettingsadlı önceden yapılandırılmış SSL yapılandırmasını kullanabilirsiniz. - Sunucu sertifikası, önceden yapılandırılmış SSL yapılandırmasında yer alan genel sertifika yetkililerinden biri tarafından imzalanmamışsa, bir yönetici bu hizmet için yeni bir SSL yapılandırması oluşturmalı ve sunucu sertifikasını yeni bir güvenli depoya aktarmalıdır. Bkz. İşletim bulutu ortamları.
- Sunucu sertifikası bir genel sertifika yetkilisi tarafından imzalandıysa,
- Önceden tanımlanmış bir hizmet akışınız varsa, seçin. Aksi takdirde Hizmetler > + > Hizmet akışıseçeneklerini tıklatarak bir hizmet akışı oluşturun. Hizmet akışı oluşturma hakkında daha fazla bilgi için bkz. Hizmet akışı oluşturma.
- Hizmet akışınıza bir komut dosyası görevi ekleyin.
- Aşağıdaki eylemleri gerçekleştirmek için komut dosyası görevine JavaScript ekleyin.
- İstek nesnesinin yeni bir örneğini oluşturun. Örnek:
var request = new BPMRESTRequest(); - İstek nesnesinin özniteliklerini zorunlu dış hizmet adı, işlem adı, HTTP üstbilgileri ve işleme ilişkin parametreler ve kimlik bilgileri ve SSL yapılandırma adı gibi isteğe bağlı öznitelikler gibi gereken şekilde ayarlayın.İstek nesnesinde belirttiğiniz öznitelikler, REST sunucusunun bir parçası olarak belirtilen karşılık gelen değerleri ve tasarımcıdaki dış hizmet için bağ tanımını geçersiz kılar.İstek nesnesi aşağıdaki öznitelikleri içerir:
externalServiceName- REST hizmetinin adı. Örneğin:
request.externalServiceName = "language-translator-v2"; operationName- OpenAPI belirtim dosyası, çağırmak istediğiniz işlem için bir
operationIdbelirtiyorsa, bunuoperationNameolarak belirtmeniz gerekir; aksi takdirde,httpMethodvepathbelirtmeniz gerekir. Örneğin:request.operationName="checkout"; httpMethodvepath- OpenAPI belirtim dosyası işlem için bir
operationIdbelirtmiyorsa, çağrılacak işlemi tanımlamak içinoperationNameözelliği yerine HTTP yöntemini ve yolunu belirtmeniz gerekir. Örneğin:request.httpMethod = "GET"; request.path = "/v1/orders"; endpointAddress- İsteğe bağlı olarak, OpenAPI belirtim dosyasında belirtilen şema, anasistem adı, kapı ve temel yolu geçersiz kılar. Örneğin:
request.endpointAddress = "https://localhost:9080/restBasePath"; httpHeaders- HTTP üstbilgilerini belirten bir JSON nesnesi. Örneğin:
request.httpHeaders = {"Content-Type": "application/json", "Accept": "text/plain"};formDataiçin:Önemli: Çağırmak istediğiniz işlemin bir gövde parametresi varsa, sağladığınız içerik tipiyle eşleşecekContent-Typeüstbilgisini belirtmeniz gerekir; tersi durumda, beklenmedik sonuçlar alabilirsiniz. İstek üstbilgisi alan adları ve değerleri doğrulanmadı.- Bir dosya içeriyorsa, içerik tipi çok parçalı/form verisi belirtin.
- Dosya içermiyorsa, içerik tipi çok parçalı/form-veri ya da uygulama/x-www-form-urlenkodlu belirtin.
Önemli: HTTP üstbilgisinde bir API anahtarı belirtirseniz, hizmet görevinin veri eşleme sekmesinde belirtilen ve dış REST hizmeti bağ tanımı sekmesinde belirtilen API anahtarını geçersiz kılan dinamik API anahtarını geçersiz kılar. parameters- İşlem için gerekli tüm parametreleri içeren bir JSON nesnesi. Örneğin:
request.parameters = {"priority": "high", "customer": "Max", "age" : 23}; - Parametreler karmaşık tipler de olabilir. Bu durumda, bunları aşağıdaki yollardan biriyle belirtin:
veyarequest.parameters = {"priority": "high", "customerInfo": { "customerFirstName" : "Max", "customerLastName" : "Smith", "amount" : 100.56, "isActive" : true }};
Burada customerInfo değişkeni, customerLastName (String), customerFirstName (String), amount (Decimal) ve isActive (Boolean) özellikleriyle karmaşık tipte CustomerInfo' dur.request.parameters = {"priority": "high", "customerInfo": tw.local.customerInfo};Önemli: Karmaşık bir tip içindekiintegertipinde bir özelliğin tamsayı olarak doğru yorumlandığından emin olmak için,Integertipinde bir değişken olarak belirtilmesi gerekir. requestTimeout- İstek zamanaşımına uğrayana kadar beklenecek süre (milisaniye). Örneğin:
request.requestTimeout = 2000; responseTimeout- Yanıtın zamanaşımına uğraması için beklenecek süre (milisaniye). Örneğin:
request.responseTimeout = 7200; usernamevepassword- Temel kimlik doğrulaması kullanılırken kullanıcı adı ve parola. Örneğin:
request.username = "user"; request.password = "password"; invocationCredential- Temel kimlik doğrulaması için
usernamevepasswordyerine çağırma kimlik bilgilerini sağlayın. Örneğin:request.invocationCredential = "MyAuthenticationAlias"; sslConfiguration- Kullanılacak SSL yapılandırmasının adı. Örneğin:
request.sslConfiguration = "MySSLConfiguration";
Önemli: Başarılı bir REST çağrısı için gerekli olan doğru değerleri geçirdiğinizden emin olun. Değerler, REST hizmetine geçerlilik denetimi olmadan geçirilir. - İsteği nesnesinde
tw.system.invokeREST()işlevini çağırmak için, sonucuBPMRESTResponse()tipinde yeni bir yanıt nesnesine atayın.Örneğin:var response = tw.system.invokeREST(request);İpucu: Aşağıdaki hatayı alırsanız:
Yöneticinizin bir SSL yapılandırması oluşturmasını ve sunucu sertifikasını içe aktarmasını (adım 3.b) istemeniz gerekir.javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.h: PKIX path building failed ...İpucu: Aşağıdaki hatayı alırsanız:javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshakeSSL yapılandırmasında belirtilen SSL/TLS iletişim kuralı ile sunucu tarafından desteklenen SSL/TLS iletişim kuralları aralığı eşleşmiyor. SSL konfigürasyonunun Koruma kalitesi (QoP) ayarları bölümünde, sunucu denetimcinizden SSL/TLS iletişim kuralını değiştirmesini sağlamanız gerekir.
- Yanıtın gerektiği gibi işlenmesi.Genellikle isteğin başarılı olup olmadığını görmek için HTTP durum kodunu denetleyebilirsiniz. Bir hata varsa, komut dosyası görevinin kendisinde bu hatayı işleyebilir ya da hizmet akışınızda farklı hataların işlenmesine izin vermek için değişkenlere değerler atayabilirsiniz. Java komut dosyanızdaki kural dışı durumları try/catch öbeğini kullanarak da yakalayabileceğinizi unutmayın; tersi durumda, kural dışı durum komut dosyasını sona erdirir. Aşağıdaki örnek kod parçacığı, komut dosyası görevinizdeki yanıtın içeriğinin yanı sıra, HTTP durum koduna, HTTP durum iletisine, yanıtın HTTP üstbilgilerine nasıl erişileceğini gösterir.
// Evaluate the response and process as necessary var httpStatusCode = response.httpStatusCode; var httpStatusMessage = response.httpStatusMessage; var httpHeaders = response.httpHeaders; var content = response.content;Unutma: Yanıtları doğrudan bir hizmet akışı değişkeninde saklayamazsınız; bu hata üretebilirJava Class com.lombardisoftware.core.script.js.BPMRESTResponseScriptable is not registered as supported class for the SymbolTable. Bunun yerine, bu nesnenin özelliklerini alabilir ve bunları hizmet akışı değişkenlerinde tek tek ya da bir İş Nesnesi 'nin bir parçası olarak saklayabilirsiniz.İpucu: Hata işleme koduna örnek için bkz. REST hizmeti hatalarını işleme.
BPMRESTRequest()istek nesnesi veBPMRESTResponseyanıt nesnesi hakkında daha fazla bilgi için bkz. JavaScript API. - İstek nesnesinin yeni bir örneğini oluşturun. Örnek:
- Kaydet ya da Düzenlemeyi Bitirdüğmesini tıklatın.