“Node.js的X包装器”通常意味着什么?

时间:2015-01-01 10:58:56

标签: node.js wrapper

例如,google-speech-api package被描述为" Google Speech API for node。"

在这种背景下究竟是什么包装器?

1 个答案:

答案 0 :(得分:8)

在这种情况下,"包装"是一个为服务或库提供方便界面的库,否则使用起来会更加不方便。包装器"包装"将原生API转换为更方便的形式。

例如,Google Speech API通过HTTP请求使用。这个page给出了这个例子:

curl -X POST \
--data-binary @alsalam-alikum.flac \
--user-agent 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7' \
--header 'Content-Type: audio/x-flac; rate=16000;' \
'https://www.google.com/speech-api/v1/recognize?client=chromium&lang=ar-QA&maxresults=10'

(请注意,该页面基于API的v1,但API现在处于v2。但是,我在这里说的并不重要。)

您绝对可以通过使用库存Node.js函数(即没有包装器)发出等效的HTTP请求来执行操作,但是:

  1. 您必须处理一些您真正不应该处理的细节。例如,查询始终以字符串https://www.google.com/speech-api/v1/recognize开头。如果手动执行,则必须始终指定它。您可能需要在每个查询上设置标头。每个查询都需要传递一个API密钥。使用包装器时,事物不依赖于您的具体情况由包装器和依赖于您的事物处理但是一直是常量(如API密钥)一旦设置可以设置一次且仅一次。

  2. 您的代码无法清楚地反映您的目标。有人只是在不知道Google Speech API的情况下阅读它会看到你正在进行HTTP查询但却不知道你正在实际做什么。使用包装器,您可以编写与您尝试更接近的内容(来自上面链接的google-speech-api页面):

    var speech = require('google-speech-api');
    
    var opts = {
      file: 'speech.mp3',
      key: '<Google API Key>'
    };
    
    speech(opts, function (err, results) {
      console.log(results);
      // [{result: [{alternative: [{transcript: '...'}]}]}]
    });
    

    当然,读这篇文章的人会想阅读包装文档,但至少他们会快速到达那里,而不是经历一堆与大局无关的细节。