如何使用REST api

时间:2015-12-28 09:53:18

标签: c# rest opentext livelink

如何使用REST api将新文档添加到Content Server 10.5?

我正在关注创建节点的Swagger docs,但我不清楚如何将文件附加到请求中。这是(大致)我正在使用的代码:

var folderId = 2000;
var docName = "test";

var uri = $"http://[serverName]/otcs/llisapi.dll/api/v1/nodes?type=144&parent_id={folderId}&name={docName}";    

var request = new HttpRequestMessage();
request.Headers.Add("Connection", new[] { "Keep-Alive" });
request.Headers.Add("Cache-Control", "no-cache, no-store, must-revalidate"); 
request.Headers.Add("Pragma", "no-cache");     
request.Headers.Add("OTCSTicket", /* ticket here */);
request.RequestUri = new Uri(uri);
request.Method = HttpMethod.Post;
request.Content = new ByteArrayContent(data);
request.Content.Headers.ContentType = new MediaTypeHeaderValue(MimeMapping.GetMimeMapping(filePath));
request.Headers.ExpectContinue = false;

var httpClientHandler = new HttpClientHandler
{
  Proxy = WebRequest.GetSystemWebProxy(),
  UseProxy = true,
  AllowAutoRedirect = true
};

using (var client = new HttpClient(httpClientHandler))
{
  var response = client.SendAsync(request).Result;
  IEnumerable<string> temp;
  var vals = response.Headers.TryGetValues("OTCSTicket", out temp) ? temp : new List<string>();
  if (vals.Any())
  {
    this.ticket = vals.First();
  }

  return response.Content.ReadAsStringAsync().Result;
}

我一直在搜索developer.opentext.com论坛,但在c#中找到一个完整的例子证明很难 - 在javascript中有一些例子,但尝试在c#或chrome或firefox扩展中复制这些例子给出相同的结果。到目前为止,调用其他CS REST方法并不是一个问题,这是第一个给我带来问题的方法。

编辑:我将错误的网址粘贴到我的问题中,我现在已经修复了。那是var uri = $"http://[serverName]/otcs/llisapi.dll/api/v1/forms/nodes/create?type=0&parent_id={folderId}&name={docName}";

3 个答案:

答案 0 :(得分:1)

您的URL看起来不像REST API,而是用于UI的传统URL。

本文应描述如何做您想做的事情:

https://developer.opentext.com/webaccess/#url=%2Fawd%2Fresources%2Farticles%2F6102%2Fcontent%2Bserver%2Brest%2Bapi%2B%2Bquick%2Bstart%2Bguide&tab=501

编辑:

好的,这就是它应该如何运作:

http://www.your_content_server.com/cs[.exe]/api/v1/nodes

发送POST

在您的有效负载中发送此内容以在您的企业工作区中创建文档

type=144
parent_id=2000
name=document_name.txt
<file>

Python中不完整的演示看起来像这样。确保首先获得有效的票证。

files = {'file': (open("file.txt", 'rb')}
data = { 'type': 144, 'parent_id': 2000, 'name': 'document_name.txt' }
cs = requests.post(url, headers={'otcsticket':'xxxxxxx'}, data=data, files=files)
if cs.status_code == 200:
    print "ok"
else:
    print cs.text

答案 1 :(得分:1)

您需要一个表单输入才能将文件放到页面上,然后您可以使用文件流来重定向它,这里有很好的指南。

Reading files in JavaScript using the File APIs

这是一个Jquery / Ajax示例。

我发现最好的解决方法是使用Postman(Chrome插件)进行实验,直到感觉舒适为止。

var form = new FormData();
form.append("file", "*filestream*"); 
form.append("parent_id", "100000");
form.append("name", "NameYourCreatedFile");
form.append("type", "144");

var settings = {
  "async": true,
  "url": "/cs.exe/api/v1/nodes", // You will need to amend this to match your environment
  "method": "POST",
  "headers": {
    "authorization": "Basic **use Postman to generate this**",
    "cache-control": "no-cache",
  },
  "processData": false,
  "contentType": false,
  "mimeType": "multipart/form-data",
  "data": form
}

$.ajax(settings).done(function (response) {
  console.log(response);
});

答案 2 :(得分:0)

看来,OpenText API仅支持通过异步JavaScript上载来上传文件-不支持通过使用包含文件内容的典型已发布表单请求来通过传统文件上载(说实话,这很糟糕-因为这样做最容易在服务器端处理)。

我已经联系了他们的支持,他们绝对没有帮助-他们说,因为它与JavaScript一起使用,所以他们无法帮助我。除了JavaScript之外,任何使用其他语言的人都是SOL。我提交了我的整个API包,但他们没有去调查,而是想尽快关闭我的机票。

我发现这样做的唯一方法是将文件上传/发送到Content Servers Web服务器上的“ Upload”目录(在我们的服务器上,该目录设置为D:\上传)。此目录位置可在管理部分中进行配置。

将文件发送到Web服务器后,发送一个$script = <<< JS $(function(){ $("#irep").on('click',enable_cb); }); function enable_cb() { if (this.checked) { $(".irep").prop("disabled", true); } else { $(".irep").prop("disabled",false); } } JS; $this->registerJs($script); //add disabled attribute $disabled = $model->irep ? 'disabled' : ''; <?= $form->field($model, 'irep')->checkbox(['id' => 'irep']) ?> <?= $form->field($model, 'intfg')->checkbox(['class' => ['irep'], $disabled=>'']) ?> <?= $form->field($model, 'extfg')->checkbox(['class' => ['irep'], $disabled =>'']) ?> 参数设置为服务器上文件的完整文件路径的创建节点请求,如下所示: OpenText API会尝试从该目录中检索文件。

我为此创建了一个PHP API,您可以在这里浏览其用法:

https://github.com/FBCLIT/OpenTextApi

file

MIME类型检测似乎是自动发生的,您无需发送任何内容即可检测文件类型。您可以将文件命名为任意名称,无需扩展名。

我还发现您不能在此庄园中使用IP地址或主机名上载文件。您必须输入要上传到的服务器的本地路径。不过,您可以提供上载目录中存在的文件名,而OpenText API似乎可以找到它。

例如,您可以传递<?php use Fbcl\OpenTextApi\Client; $client = new Client('http://server.com/otcs/cs.exe', 'v1'); $api = $client->connect('username', 'secret'); try { // The folder node ID of where the file will be created under. $parentNodeId = '12356'; // The file name to display in OpenText $fileName = 'My Document.txt'; // The actual file path of the file on the OpenText server. $serverFilePath = 'D:\Upload\My Document.txt'; $response = $api->createNodeDocument($parentNodeId, $fileName, $serverFilePath); if (isset($response['id'])) { // The ID of the newly created document will be returned. echo $response['id']; } } catch (\Exception $ex) { // File not found on server drive, or issue creating node from given parent. } D:\Uploads\Document.txt

如果未正确完成操作,则应收到错误消息:

客户端错误:Document.txt导致POST http://server.com/otcs/cs.exe/api/v1/nodes响应:{“错误”:“错误:在上载目录中找不到文件。”}