Heim Web-Frontend js-Tutorial Designprinzipien der JavaScript-API

Designprinzipien der JavaScript-API

Feb 07, 2017 pm 02:52 PM
api javascript 设计原则

Vor einiger Zeit haben wir unsere native Modul-API organisiert und optimiert (iOS- und Android-Module sind in JavaScript-Schnittstellen gekapselt), daher habe ich mehrere Artikel zum JavaScript-API-Design studiert, aber ich werde davon sehr profitieren Nehmen Sie sie hier auf.

Gutes API-Design: Erreichen Sie das Ziel der Abstraktion und bleiben Sie gleichzeitig selbstbeschreibend.

Mit einer gut gestalteten API können Entwickler schnell loslegen. Sie müssen nicht häufig Handbücher und Dokumente bereithalten und müssen nicht häufig die Community des technischen Supports aufsuchen.

Glatte Schnittstelle

Methodenkette: reibungslos und leicht zu lesen, leichter zu verstehen

//常见的 API 调用方式:改变一些颜色,添加事件监听
var elem = document.getElementById("foobar");
elem.style.background = "red";
elem.style.color = "green";
elem.addEventListener('click', function(event) {
  alert("hello world!");
}, true);
//(设想的)方法链 API
DOMHelper.getElementById('foobar')
  .setStyle("background", "red")
  .setStyle("color", "green")
  .addEvent("click", function(event) {
    alert("hello world");
  });
Nach dem Login kopieren

Set- und Get-Operationen können zu einer kombiniert werden, je mehr Methoden; Je besser die Dokumentation, desto schwieriger ist es,

var $elem = jQuery("#foobar");
//setter
$elem.setCss("background", "green");
//getter
$elem.getCss("color") === "red";
//getter, setter 合二为一
$elem.css("background", "green");
$elem.css("color") === "red";
Nach dem Login kopieren

Konsistenz

verwandte Schnittstellen einen konsistenten Stil beizubehalten. Wenn ein vollständiger Satz von APIs ein vertrautes und komfortables Gefühl vermittelt, wird dies den Entwicklern erheblich erleichtern ' Angst vor neuen Werkzeugen.

Dinge benennen: kurz, selbsterklärend und vor allem konsistent

„In der Informatik gibt es nur zwei schwierige Probleme: Cache-Invalidierung und das Benennen von Dingen.“
„Die gibt es Es gibt nur zwei Probleme in der Informatik: Cache-Ungültigmachungen und Namensprobleme“
– Phil Karlton

Wählen Sie eine Formulierung, die Ihnen gefällt, und bleiben Sie dabei. Wählen Sie einen Stil und behalten Sie ihn bei.

Verarbeitungsparameter

Sie müssen berücksichtigen, wie die von Ihnen bereitgestellte Methode verwendet wird. Wird sie wiederholt aufgerufen? Warum wird es wiederholt aufgerufen? Wie hilft Ihre API Entwicklern, doppelte Aufrufe zu reduzieren?
Empfangen Sie Kartenzuordnungsparameter, Rückrufe oder serialisierte Attributnamen, was Ihre API nicht nur sauberer, sondern auch komfortabler und effizienter in der Nutzung macht.

Die css()-Methode von jQuery kann Stile für DOM-Elemente festlegen:

jQuery("#some-selector")
  .css("background", "red")
  .css("color", "white")
  .css("font-weight", "bold")
  .css("padding", 10);
Nach dem Login kopieren

Diese Methode kann ein JSON-Objekt akzeptieren:

jQuery("#some-selector").css({
  "background" : "red",
  "color" : "white",
  "font-weight" : "bold",
  "padding" : 10
});
//通过传一个 map 映射绑定事件
jQuery("#some-selector").on({
  "click" : myClickHandler,
  "keyup" : myKeyupHandler,
  "change" : myChangeHandler
});
//为多个事件绑定同一个处理函数
jQuery("#some-selector").on("click keyup change", myEventHandler);
Nach dem Login kopieren

Verarbeitungstyp

Beim Definieren einer Methode müssen Sie entscheiden, welche Parameter sie empfangen kann. Wir wissen nicht, wie die Leute unseren Code verwenden, aber wir können vorausschauender sein und überlegen, welche Parametertypen wir unterstützen.

//原来的代码
DateInterval.prototype.days = function(start, end) {
  return Math.floor((end - start) / 86400000);
};
//修改后的代码
DateInterval.prototype.days = function(start, end) {
  if (!(start instanceof Date)) {
    start = new Date(start);
  }
  if (!(end instanceof Date)) {
    end = new Date(end);
  }
  return Math.floor((end.getTime() - start.getTime()) / 86400000);
};
Nach dem Login kopieren

Mit nur 6 hinzugefügten Codezeilen ist unsere Methode leistungsstark genug, um Datumsobjekte, numerische Zeitstempel und sogar einen solchen String zu empfangen

Wenn Sie den Typ des eingehenden Parameters (Zeichenfolge, Zahl, Boolescher Wert) sicherstellen müssen, können Sie ihn wie folgt konvertieren:

function castaway(some_string, some_integer, some_boolean) {
  some_string += "";
  some_integer += 0; // parseInt(some_integer, 10) 更安全些
  some_boolean = !!some_boolean;
}
Nach dem Login kopieren

handle undefiniert

in order Um Ihre API robuster zu machen, können Sie das Argumentobjekt überprüfen, wenn Sie feststellen müssen, ob ein echter undefinierter Wert übergeben wird:

function testUndefined(expecting, someArgument) {
  if (someArgument === undefined) {
    console.log("someArgument 是 undefined");
  }
  if (arguments.length > 1) {
    console.log("然而它实际是传进来的");
  }
}
testUndefined("foo");
// 结果: someArgument 是 undefined
testUndefined("foo", undefined);
// 结果:  someArgument 是 undefined , 然而它实际是传进来的
Nach dem Login kopieren

Benennen Sie die Parameter

event.initMouseEvent(
  "click", true, true, window,
  123, 101, 202, 101, 202,
  true, false, false, false,
  1, null);
Nach dem Login kopieren

Event.initMouseEvent Diese Methode ist einfach. Es ist verrückt, ohne die Dokumentation zu lesen. Wer kann schon sagen, was die einzelnen Parameter bedeuten?

Geben Sie jedem Parameter einen Namen und weisen Sie einen Standardwert zu. Beispielsweise hat

event.initMouseEvent(
  type="click",
  canBubble=true,
  cancelable=true,
  view=window,
  detail=123,
  screenX=101,
  screenY=202,
  clientX=101,
  clientY=202,
  ctrlKey=true,
  altKey=false,
  shiftKey=false,
  metaKey=false,
  button=1,
  relatedTarget=null);
Nach dem Login kopieren

ES6 oder Harmony Standardparameterwerte und Ruheparameter.

Der Parameter empfängt ein JSON-Objekt

Anstatt eine Reihe von Parametern zu empfangen, ist es besser, ein JSON-Objekt zu empfangen:

function nightmare(accepts, async, beforeSend, cache, complete, /* 等28个参数 */) {
  if (accepts === "text") {
    // 准备接收纯文本
  }
}
function dream(options) {
  options = options || {};
  if (options.accepts === "text") {
    // 准备接收纯文本
  }
}
Nach dem Login kopieren

Es ist auch einfacher aufzurufen :

nightmare("text", true, undefined, false, undefined, /* 等28个参数 */);
dream({
  accepts: "text",
  async: true,
  cache: false
});
Nach dem Login kopieren

Parameter-Standardwerte

Es ist am besten, Standardwerte für Parameter zu haben. Die voreingestellten Standardwerte können durch jQuery.extend() http:// überschrieben werden. underscorejs.org/#extend) und Object.extend von Protoype.

var default_options = {
  accepts: "text",
  async: true,
  beforeSend: null,
  cache: false,
  complete: null,
  // …
};
function dream(options) {
  var o = jQuery.extend({}, default_options, options || {});
  console.log(o.accepts);
}
dream({ async: false });
// prints: "text"
Nach dem Login kopieren

Erweiterbarkeit

Rückrufe

Durch Rückrufe können API-Benutzer bestimmte Teile Ihres Codes überschreiben. Öffnen Sie einige Funktionen, die angepasst werden müssen, in konfigurierbare Rückruffunktionen, sodass API-Benutzer Ihren Standardcode einfach überschreiben können.

Sobald die API-Schnittstelle einen Rückruf erhält, stellen Sie sicher, dass Sie ihn dokumentieren und Codebeispiele bereitstellen.

Ereignisse

Es ist am besten, den Namen der Ereignisschnittstelle zu kennen. Sie können den Ereignisnamen frei wählen, um eine Duplizierung von Namen mit nativen Ereignissen zu vermeiden.

Umgang mit Fehlern

Nicht alle Fehler sind für Entwickler zum Debuggen von Code nützlich:

// jQuery 允许这么写
$(document.body).on('click', {});
// 点击时报错
//   TypeError: ((p.event.special[l.origType] || {}).handle || l.handler).apply is not a function
//   in jQuery.min.js on Line 3
Nach dem Login kopieren

Das Debuggen solcher Fehler ist schmerzhaft, also verschwenden Sie keine Zeit für Entwickler. Sagen Sie ihnen direkt, welchen Fehler sie gemacht haben:

if (Object.prototype.toString.call(callback) !== '[object Function]') { // 看备注
  throw new TypeError("callback is not a function!");
}
Nach dem Login kopieren

Hinweis: Art des Rückrufs === „Funktion“ verursacht Probleme in alten Browsern und das Objekt wird als Funktion behandelt.

Vorhersehbarkeit

Eine gute API ist vorhersehbar und Entwickler können ihre Verwendung anhand von Beispielen ableiten.

Die Funktionserkennung von Modernizr ist ein Beispiel:

a) Die verwendeten Eigenschaftsnamen stimmen genau mit HTML5, CSS-Konzepten und APIs überein

b) Jede einzelne Erkennung ist konsistent und gibt true oder zurück falsche Werte

// 所有这些属性都返回 'true' 或 'false'
Modernizr.geolocation
Modernizr.localstorage
Modernizr.webworkers
Modernizr.canvas
Modernizr.borderradius
Modernizr.boxshadow
Modernizr.flexbox
Nach dem Login kopieren

basiert auf Konzepten, mit denen Entwickler bereits vertraut sind und vorhersehbar sein können.

Die Selektorsyntax von jQuery ist ein offensichtliches Beispiel dafür, dass CSS1-CSS3-Selektoren direkt in der DOM-Selektor-Engine verwendet werden können.

$("#grid") // Selects by ID
$("ul.nav > li") // All LIs for the UL with class "nav"
$("ul li:nth-child(2)") // Second item in each list
Nach dem Login kopieren

Proportionale Koordination

Eine gute API ist nicht unbedingt eine kleine API, die Größe der API muss im Einklang mit ihrer Funktionalität stehen.

Moment.js, eine bekannte Bibliothek zur Datumsanalyse und -formatierung, kann als ausgewogen bezeichnet werden. Ihre API ist sowohl prägnant als auch funktional.

Für eine funktionsspezifische Bibliothek wie Moment.js ist es wichtig, die API fokussiert und klein zu halten.

API-Dokumentation schreiben

Eine der schwierigsten Aufgaben in der Softwareentwicklung ist das Schreiben von Dokumentationen. Tatsächlich hasst es jeder, Dokumentationen zu schreiben. Dokumentationstool verwenden.

Im Folgenden sind einige Tools zur automatischen Dokumentgenerierung aufgeführt:

  • YUIDoc (erfordert Node.js, npm)

  • JsDoc Toolkit (erfordert Node.js, npm)

  • Markdox (erfordert Node.js, npm)

  • Dox (erfordert Node.js, npm)

  • Docco (erfordert Node.js, Python, CoffeeScript)

  • JSDuck (erfordert Ruby, Gem)

  • JSDoc 3 (erfordert Java)

Das Wichtigste ist: Stellen Sie sicher, dass die Dokumentation und der Code gleichzeitig aktualisiert werden.

Referenzen:

Gutes API-Design

Entwerfen besserer JavaScript-APIs

Geheimnisse fantastischen JavaScript-API-Designs

über: http :/ /jinlong.github.io/2015/08/31/secrets-of-awesome-javascript-api-design/

Das Obige ist der Inhalt der JavaScript-API-Designprinzipien. Weitere verwandte Inhalte finden Sie hier zu PHP Chinese Net (www.php.cn)!


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen Dec 17, 2023 pm 05:30 PM

WebSocket und JavaScript: Schlüsseltechnologien zur Realisierung von Echtzeit-Überwachungssystemen Einführung: Mit der rasanten Entwicklung der Internet-Technologie wurden Echtzeit-Überwachungssysteme in verschiedenen Bereichen weit verbreitet eingesetzt. Eine der Schlüsseltechnologien zur Erzielung einer Echtzeitüberwachung ist die Kombination von WebSocket und JavaScript. In diesem Artikel wird die Anwendung von WebSocket und JavaScript in Echtzeitüberwachungssystemen vorgestellt, Codebeispiele gegeben und deren Implementierungsprinzipien ausführlich erläutert. 1. WebSocket-Technologie

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Dec 17, 2023 pm 05:13 PM

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Einführung: Heutzutage ist die Genauigkeit von Wettervorhersagen für das tägliche Leben und die Entscheidungsfindung von großer Bedeutung. Mit der Weiterentwicklung der Technologie können wir genauere und zuverlässigere Wettervorhersagen liefern, indem wir Wetterdaten in Echtzeit erhalten. In diesem Artikel erfahren Sie, wie Sie mit JavaScript und WebSocket-Technologie ein effizientes Echtzeit-Wettervorhersagesystem aufbauen. In diesem Artikel wird der Implementierungsprozess anhand spezifischer Codebeispiele demonstriert. Wir

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

Oracle API-Nutzungshandbuch: Erkundung der Datenschnittstellentechnologie Oracle API-Nutzungshandbuch: Erkundung der Datenschnittstellentechnologie Mar 07, 2024 am 11:12 AM

Oracle ist ein weltbekannter Anbieter von Datenbankmanagementsystemen und seine API (Application Programming Interface) ist ein leistungsstarkes Tool, das Entwicklern hilft, einfach mit Oracle-Datenbanken zu interagieren und diese zu integrieren. In diesem Artikel befassen wir uns mit dem Oracle API-Nutzungsleitfaden, zeigen den Lesern, wie sie die Datenschnittstellentechnologie während des Entwicklungsprozesses nutzen können, und stellen spezifische Codebeispiele bereit. 1.Orakel

Analyse der Oracle API-Integrationsstrategie: Erreichen einer nahtlosen Kommunikation zwischen Systemen Analyse der Oracle API-Integrationsstrategie: Erreichen einer nahtlosen Kommunikation zwischen Systemen Mar 07, 2024 pm 10:09 PM

Analyse der Oracle API-Integrationsstrategie: Um eine nahtlose Kommunikation zwischen Systemen zu erreichen, sind spezifische Codebeispiele erforderlich. Im heutigen digitalen Zeitalter müssen interne Unternehmenssysteme miteinander kommunizieren und Daten austauschen, und Oracle API ist eines der wichtigen Tools, um eine nahtlose Kommunikation zu erreichen Kommunikation zwischen Systemen. Dieser Artikel beginnt mit den grundlegenden Konzepten und Prinzipien von OracleAPI, untersucht API-Integrationsstrategien und gibt schließlich spezifische Codebeispiele, um den Lesern zu helfen, OracleAPI besser zu verstehen und anzuwenden. 1. Grundlegende Oracle-API

So gehen Sie mit Laravel-API-Fehlerproblemen um So gehen Sie mit Laravel-API-Fehlerproblemen um Mar 06, 2024 pm 05:18 PM

Titel: Wie man mit Laravel-API-Fehlerproblemen umgeht, sind spezifische Codebeispiele erforderlich. Bei der Entwicklung von Laravel treten häufig API-Fehler auf. Diese Fehler können verschiedene Ursachen haben, z. B. Logikfehler im Programmcode, Probleme bei Datenbankabfragen oder Fehler bei externen API-Anfragen. Der Umgang mit diesen Fehlerberichten ist ein zentrales Thema. In diesem Artikel wird anhand spezifischer Codebeispiele gezeigt, wie Laravel-API-Fehlerberichte effektiv verarbeitet werden. 1. Fehlerbehandlung in Laravel

So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript Jan 05, 2024 pm 01:37 PM

Einführung in die Methode zum Abrufen des HTTP-Statuscodes in JavaScript: Bei der Front-End-Entwicklung müssen wir uns häufig mit der Interaktion mit der Back-End-Schnittstelle befassen, und der HTTP-Statuscode ist ein sehr wichtiger Teil davon. Das Verstehen und Abrufen von HTTP-Statuscodes hilft uns, die von der Schnittstelle zurückgegebenen Daten besser zu verarbeiten. In diesem Artikel wird erläutert, wie Sie mithilfe von JavaScript HTTP-Statuscodes erhalten, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist ein HTTP-Statuscode? HTTP-Statuscode bedeutet, dass der Dienst den Dienst anfordert, wenn er eine Anfrage an den Server initiiert

Insomnia-Tutorial: So verwenden Sie die PHP-API-Schnittstelle Insomnia-Tutorial: So verwenden Sie die PHP-API-Schnittstelle Jan 22, 2024 am 11:21 AM

PHP-API-Schnittstelle: So verwenden Sie Insomnia. Insomnia ist ein leistungsstarkes API-Test- und Debugging-Tool. Es kann Entwicklern helfen, API-Schnittstellen schnell und einfach zu testen und zu überprüfen. Es unterstützt mehrere Programmiersprachen und Protokolle, einschließlich PHP. In diesem Artikel wird erläutert, wie Sie Insomnia zum Testen der PHPAPI-Schnittstelle verwenden. Schritt 1: Insomnia installierenInsomnia ist eine plattformübergreifende Anwendung, die Windows, MacOS und Linux unterstützt.

See all articles