Программирование прикладное это

В вычислительнойтехнике интерфейс прикладного программирования (API) — это интерфейс , который определяет взаимодействие между несколькими программными приложениями или смешанными аппаратно-программными посредниками.[1] Он определяет виды вызовов или запросов, которые могут быть сделаны, как их сделать, форматы данных, которые следует использовать, соглашения. Которым следует следовать, и т. Д. Он также может обеспечить механизмы расширения. Чтобы пользователи могли расширять существующие функциональные возможности различными способами и в разной степени.[2] API может быть полностью настраиваемым. Специфичным для компонента или разработанным на основе отраслевого стандарта для обеспечения

совместимости. Через скрывая информацию, API позволяют модульное программирование, позволяя пользователям использовать интерфейс независимо от реализации.

Ссылка на веб-API в настоящее время является наиболее распространенным использованием этого термина.[3] Существуют также API для языков программирования, программных библиотек, компьютерных операционных системи компьютерного оборудования. API возникли в 1940-х годах. Хотя термин API появился только в 1960-х и 70-х годах.

При построении приложений API (application programming interface) упрощает программирование,

абстрагируя базовую реализацию и предоставляя только необходимые разработчику объекты или действия. В то время как графический интерфейс для почтового клиента может предоставить пользователю кнопку. Которая выполняет все шаги для извлечения и выделения новых писем. API для ввода/вывода файлов может дать разработчику функцию, которая копирует файл из одного места в другое. Не требуя от разработчика понимания операций файловой системы. Происходящих за кулисами.[4]

История термина

Значение термина API расширилось за свою историю.

Сначала он описывал интерфейс только для программ. Обращенных к конечному пользователю. Известных как прикладные программы. Это происхождение до сих пор отражено в названии Сегодня термин API шире. Включая также утилитарное программное обеспечение и даже аппаратные интерфейсы.[6]

Идея API намного старше. Чем сам термин. Британские компьютерные ученые Уилкс и Уилер работали над модульными библиотеками программного обеспечения в 1940-х годах для компьютера EDSAC. Их книга машиныДжошуа Блох утверждает. Что Уилкс и Уилер [6]

Термин -ing) впервые зафиксирован в статье под названием

Data structures and techniques for remote computer graphics, представленной на конференции AFIPS в 1968году. Авторы данной статьи используют этот термин для описания взаимодействия приложения — в данном случае графической программы — с остальной компьютерной системой. Последовательный интерфейс приложения (состоящий из вызовов подпрограмм Fortran) был предназначен для того. Чтобы освободить программиста от работы с особенностями графического устройства отображения и обеспечить аппаратную независимость если компьютер или дисплей были заменены.[7]

Этот термин был введен в область баз данных C. J. Date[9] в статье 1974 года под названием

и сетевой подходы: сравнение интерфейса прикладного программирования[10]. API стал частью фреймворка ANSI/SPARC для систем управления базамиданных . Этот фреймворк рассматривал интерфейс прикладного программирования отдельно от других интерфейсов. Таких как интерфейс запросов. Специалисты по базам данных в 1970-х годах заметили. Что эти различные интерфейсы могут быть объединены; достаточно богатый интерфейс приложения может поддерживать и другие интерфейсы.[5]

Это наблюдение привело к созданию API. Которые поддерживали все типы программирования. А не только прикладное.

К 1990 году технолог Карл Маламуд определил API просто как [11].]

Концепция API была вновь расширена с появлением веб-API. В диссертации Роя ФилдингаАрхитектурные стили и дизайн сетевых программных архитектурКалифорнийском университете в Ирвине в 2000 году была описана передача репрезентативного состояния (REST) и описана идея

Веб-API в настоящее время является наиболее распространенным значением термина API.[3] При использовании таким образом термин API имеет некоторое совпадение по смыслу с терминами коммуникационный протокол и удаленный вызов процедуры.

Семантический веб , предложенный Тимом Бернерсом-Ли в 2001 году. Включал открытый, распределенный интерфейс данных. А не в интерфейс поведения программного обеспечения.

Вместо этого все большее распространение получили проприетарные интерфейсы и агенты.

Библиотеки и фреймворки

Интерфейс к библиотеке программного обеспечения является одним из типов API. API описывает и предписывает

Один API может иметь несколько реализаций (или ни одной. Будучи абстрактным) в виде различных библиотек. Которые совместно используют один и тот же программный интерфейс.

Отделение API от его реализации может позволить программам. Написанным на одном языке. Использовать библиотеку. Написанную на другом.

Например, поскольку Scala и Java компилируются в совместимый байт-код . Разработчики Scala могут воспользоваться преимуществами любого Java API.]

Использование API может варьироваться в зависимости от типа используемого языка программирования. API для процедурного языка, такого как Lua , может состоять в основном из базовых подпрограмм для выполнения кода. Манипулирования данными или обработки ошибок. В то время как API для объектно-ориентированного языка, такого как Java. Будет предоставлять спецификацию классов и их

методов класса.]

Языковые привязки также являются API-интерфейсами. Сопоставляя функции и возможности одного языка с интерфейсом. Реализованным на другом языке. Привязка языка позволяет использовать библиотеку или службу. Написанную на одном языке. При разработке на другом языке.[17] Инструменты. Такие как SWIG и F2PY. Генератор интерфейса Fortran-to —Python, облегчают создание таких интерфейсов.[18]

API также может быть связан с программным фреймворком: фреймворк может быть основан на нескольких библиотеках. Реализующих несколько API. Но в отличие от обычного использования API. Доступ к поведению. Встроенному в фреймворк. Опосредован расширением его содержимого новыми классами. Подключенными к самому фреймворку.

Более того, общий программный поток управления может быть вне контроля вызывающего и в руках фреймворка путем инверсии управления или аналогичного механизма.]

Операционные системы

API может указывать интерфейс между приложением и операционной системой.[21]POSIX, например. Определяет набор общих API. Которые направлены на то. Чтобы позволить приложению. Написанному для операционной системы. Соответствующей POSIX. Быть скомпилированным для другой операционной системы. Соответствующей POSIX.

Linux и Berkeley Software Distribution

являются примерами операционных систем. Реализующих API POSIX.]

Microsoft продемонстрировала твердую приверженность обратно совместимому API. Особенно в своей библиотеке Windows API (Win32). Поэтому старые приложения могут работать в более новых версиях Windows с использованием специфичного для исполняемого файла параметра. Называемого [23]

API отличается от двоичного интерфейса приложения (ABI) тем. Что API основан на исходном коде. А ABI-на двоичном. Например, POSIX предоставляет API. В то время как стандартная база Linux предоставляет ABI.]

Удаленные API

Удаленные API позволяют разработчикам управлять удаленными ресурсами с помощью

протоколов, специальных стандартов связи. Которые позволяют различным технологиям работать вместе. Независимо от языка или платформы. Например, Java Database Connectivity API позволяет разработчикам запрашивать множество различных типов баз данных с одним и тем же набором функций. В то время как Java remote method invocation API использует протокол Java Remote Method Protocol для вызова функций. Которые работают удаленно. Но кажутся локальными разработчику.]

Поэтому удаленные API полезны для поддержания абстракции объекта в объектно-ориентированном программировании; вызов метода, выполняемый локально на прокси-объекте. Вызывает соответствующий метод на удаленном объекте. Используя протокол удаленного доступа. И получает результат. Который будет использоваться локально в качестве возвращаемого значения.

Модификация прокси-объекта также приведет к соответствующей модификации удаленного объекта.

]

Веб-API

Основная статья: Web API

Веб-API-это определенные интерфейсы. Через которые происходит взаимодействие между предприятием и приложениями. Использующими его активы. Что также является

Соглашением об уровне обслуживания (SLA). Определяющим функционального поставщика и предоставляющим путь к сервису или URL-адрес для его пользователей API. Подход API-это архитектурный подход. Который вращается вокруг предоставления программного интерфейса для набора сервисов различным приложениям. Обслуживающим различные типы потребителей.[29]

При использовании в контексте веб-разработкиAPI обычно определяется как набор спецификаций . Таких как сообщения запросов протокола передачи гипертекста (HTTP). А также определение структуры ответных сообщений. Обычно в расширяемом языке разметки (XML) или объектной нотации JavaScript (JSON) формат. Примером может служить API судоходной компании. Который может быть добавлен на веб-сайт. Ориентированный на электронную коммерцию. Чтобы облегчить заказ услуг доставки и автоматически включать текущие тарифы доставки. Без необходимости разработчику сайта вводить таблицу тарифов грузоотправителя в веб-базу данных. В то время как

веб-сервиса, недавняя тенденция (так называемый Web 2.0) отошла от простых веб-сервисов на основе протокола доступа к объектам (SOAP) и сервис-ориентированной архитектуры (SOA) в сторону более прямой репрезентативной передачи состояний

(REST) в стиле веб-ресурсов [30] Часть этой тенденции связана с движением Semantic Web в сторону Resource Description Framework (RDF). Концепции продвижения веб-технологий разработки онтологий. Веб-API позволяют объединять несколько API в новые приложения. Известные как мэшапы.[31] В пространстве социальных сетей веб-API позволяют веб-сообществам облегчать обмен контентом и данными между сообществами и приложениями. Таким образом, контент. Созданный в одном месте динамически. Может быть размещен и обновлен в нескольких местах сети.] Например. REST API Twitter позволяет разработчикам получать доступ к основным данным Twitter. А Search API предоставляет разработчикам методы взаимодействия с данными Twitter Search и trends

[33]

Дизайн API оказывает значительное влияние на его использование.[4] Принцип сокрытия информации описывает роль программных интерфейсов как возможность модульного программирования путем сокрытия деталей реализации модулей. Так что пользователям модулей не нужно понимать сложности внутри модулей.[34] Таким образом. Дизайн API пытается предоставить только те инструменты. Которые ожидал бы пользователь. Проектирование программных интерфейсов представляет собой важную часть архитектуры

программногообеспечения . Организации сложной части программного обеспечения.[35]

Политика выпуска

API-интерфейсы являются одним из наиболее распространенных способов интеграции технологических компаний. Те, кто предоставляет и использует API. Считаются членами бизнес-экосистемы.]

Основными политиками выпуска API являются:[37]

  • Private: API предназначен только для внутреннего использования компанией.
  • Партнер: Только определенные деловые партнеры могут использовать API. Например, компании по прокату автомобилей, такие как Uber и Lyft, позволяют одобренным сторонним разработчикам напрямую заказывать поездки из своих приложений. Это позволяет компаниям осуществлять контроль качества. Контролируя. Какие приложения имеют доступ к API. И обеспечивает им дополнительный поток дохода.]
  • Public: API доступен для использования общественностью. Например, Microsoft делает API Windows общедоступным, а Apple выпускает свой API Cocoa, так что программное обеспечение может быть написано для их платформ. Не все публичные API. Как правило. Доступны всем. Например, интернет-провайдеры. Такие как Cloudflare или Voxility. Используют RESTful API. Чтобы предоставить клиентам и реселлерам доступ к информации об инфраструктуре. Статистике DDoS-атак. Производительности сети или элементам управления приборной панелью.[39] Доступ к таким API предоставляется либо “токенами API”. Либо валидациями статуса клиента.[40]

Последствия публичного API

Важным фактором. Когда API становится общедоступным. Является его Изменения в API—например. Добавление новых параметров к вызову функции—могут нарушить совместимость с клиентами. Зависящими от этого API.]

Когда части публично представленного API подвержены изменениям и. Следовательно. Не стабильны. Такие части конкретного API должны быть явно задокументированы как Например. В библиотеке Google Guava части. Которые считаются нестабильными и которые могут вскоре измениться. Помечены аннотацией Java @Beta.]

Публичный API иногда может объявить части себя устаревшими или отмененными. Обычно это означает. Что часть API должна рассматриваться как кандидат на удаление или изменение обратно несовместимым способом. Таким образом. Эти изменения позволяют разработчикам отказаться от тех частей API. Которые будут удалены или не будут поддерживаться в будущем.]

Клиентский код может содержать инновационные или оппортунистические способы использования. Которые не были предназначены разработчиками API. Другими словами. Для библиотеки со значительной базой пользователей. Когда элемент становится частью публичного API. Он может использоваться различными способами.[44] 19 февраля 2020 года, Акамай опубликовали свой ежегодный отчет С декабря 2017 года по ноябрь 2019 года Akamai стала свидетелем 85,42 миллиарда атак с нарушением учетных данных. Около 20%, или 16,55 миллиарда. Были против имен хостов. Определенных как конечные точки API. Из них 473,5 миллиона были направлены на организации сектора финансовых услуг.[45]

Документация API описывает. Какие услуги предлагает API и как использовать эти услуги. Стремясь охватить все. Что клиент должен знать для практических целей.

Документация имеет решающее значение для разработки и обслуживания приложений. Использующих API.[46] Документация API традиционно находится в файлах документации. Но также может быть найдена в социальных сетях. Таких как блоги. Форумы и веб-сайты вопросов и ответов.[47]

Традиционные файлы документации часто представляются через систему документации. Такую как Javadoc или Pydoc. Которая имеет согласованный внешний вид и структуру. Однако типы контента. Включенного в документацию. Отличаются от API к API.]

В интересах ясности документация API может включать описание классов и методов в API, а также

Ограничения и ограничения на то. Как API может быть использован. Также рассматриваются в документации. Например, документация для функции API может отметить. Что ее параметры не могут быть нулевыми. Что сама функция не является потокобезопасной[49], поскольку документация API. Как правило. Является всеобъемлющей. Для авторов является проблемой поддерживать обновление документации и для пользователей внимательно читать ее. Потенциально приводя к ошибкам.[41]

Документация API может быть обогащена метаданными. Такими как аннотации Java. Эти метаданные могут использоваться компилятором. Инструментами и средой выполнения для реализации пользовательского поведения или пользовательской обработки.[50]

Можно генерировать документацию API на основе данных. Наблюдая за многими программами. Использующими данный API. Можно сделать вывод о типичном использовании. А также о необходимых контрактах и директивах.[51] Затем шаблоны могут быть использованы для генерации естественного языка из добытых данных.

Спор о защите авторских прав на API

В 2010 году корпорация Oracle подала в суд на Google за распространение новой реализации Java. Встроенной в операционную систему Android.[52] Google не получила никакого разрешения на воспроизведение Java API. Хотя разрешение было дано аналогичному проекту OpenJDK. Судья Уильям Алсуп постановил в деле Oracle v. Google, что API не могут быть защищены авторским правом в США и что победа Oracle широко расширила бы защиту авторских прав на

Согласиться с утверждением Oracle означало бы позволить любому авторскому праву одной версии кода выполнять систему команд и тем самым запретить всем другим писать ее различные версии для выполнения всех или части одних и тех же команд.[53][54]

Однако в 2014 году решение Alsup было отменено по апелляции в Апелляционный суд Федерального округа, хотя вопрос о том. Является ли такое использование API добросовестным использованием , остался нерешенным. [55][56]

В 2016 году после двухнедельного судебного разбирательства присяжные решили. Что повторное внедрение Google API Java является добросовестным использованием, но Oracle пообещала обжаловать это решение.Oracle выиграла апелляцию. И Апелляционный суд Федерального округа постановил. Что использование Google API не соответствует требованиям добросовестного использования.[58] В 2019 году Google подала апелляцию в Верховный суд США по поводу решений об авторском праве и добросовестном использовании. И Верховный суд удовлетворил ее.[59] Из-за пандемии COVID-19устные слушания по этому делу были отложены до октября 2020 года.]

См. также

  1. ^
  2. ^ Фишер, Шарон (1989). . Гугл-Книги.
  3. ^ b Лейн, Кин (10 октября 2019 года). . Почтальон. Извлечено 18 сентября 2020года . Когда вы слышите аббревиатуру “API” или ее расширенную версию “Интерфейс прикладного программирования”. Это почти всегда относится к нашему современному подходу. Поскольку мы используем HTTP для предоставления доступа к машиночитаемым данным в формате JSON или XML. Часто просто называемым “веб-APIAPI — интерфейсы существуют почти так же долго. Как и компьютерные. Но современные веб-интерфейсы начали формироваться в начале 2000-х годов.
  4. ^ b c 3333кларк. Стивен (2004). . У доктора Добба. Извлечено 29 июля 2016года .
  5. ^ b Архитектура баз данных—технико-экономическое обоснование (отчет). Вашингтон, округ Колумбия: Министерство торговли США. Национальное бюро стандартов. Апрель 1981. стр. 45-47. hdl:2027/mdp.39015077587742. LCCN 81600004. Специальное издание NBS 500-76. Извлечено 18 сентября 2020года .
  6. ^ Перейти вверх к: a b c Bloch. Joshua (August 8, 2018). Краткая, самоуверенная история API (Речи). QCon. Сан-Франциско: ИнфоК. Извлечено 18 сентября 2020года .
  7. ^ b Коттон, Айра У.; Грейторекс, Фрэнк С. (Декабрь 1968). . AFIPS ’68: Материалы Осенней совместной компьютерной конференции 9-11 декабря 1968 года. AFIPS 1968 Осенняя Совместная компьютерная конференция. Я. Сан-Франциско. Калифорния: Ассоциация вычислительной техники. doi:10.1145/1476589.1476661. ISBN 978-1450378994. OCLC 1175621908.
  8. ^ . Оксфордский словарь английского языка (Онлайн-ред.). Издательство Оксфордского университета. (Требуется подписка или членство в участвующем учреждении.)
  9. ^ Дата, Си Джей (18 июля 2019 года). Э. Ф. Кодд и реляционная теория: Подробный обзор и анализ основных трудов Кодда по базамданных . стр. 135. ISBN 978-1684705276.
  10. ^ Date, C. J.; Codd, E. F. (январь 1975). . В Рэндалле Рустине (ред.). Труды семинара ACM-SIGMOD 1974 по описанию данных. Доступу и контролю. SIGMOD Workshop 1974. 2. Ann Arbor, Michigan: Association for Computing Machinery. pp. 83-113. doi:10.1145/800297.811532. ISBN 978-1450374187. OCLC 1175623233.
  11. ^ Карл, Маламуд (1990). Анализ сетей Novell. Ван Ностранд Рейнгольд. ISBN 978-0442003647.
  12. ^ Филдинг, Рой (2000). Архитектурные стили и проектирование сетевых программных архитектур (PhD). Извлечено 18 сентября 2020года .
  13. ^ Доцика, Фефи (август 2010). Международный журнал информационного менеджмента. 30 (4): 335-342. doi:10.1016/j.ijinfomgt.2009.12.003.
  14. ^ Одерский, Мартин; Спун, Лекс; Веннерс, Билл (10 декабря 2008 года). . www.artima.com. Извлечено 29 июля 2016года .
  15. ^ de Figueiredo. Luiz Henrique; Ierusalimschy, Roberto; Filho, Waldemar Celes. . TeCGraf Grupo de Tecnologia Em Computacao Grafica. CiteSeerX 10.1.1.47.5194. S2CID 59833827. Извлечено 29 июля 2016года .
  16. ^ Sintes, Tony (13 июля 2001). — А что вообще такое Java API?. Яваворлд. Получено 2020-07-18.
  17. ^ Эмери, Дэвид. . Acm.org. Архивирован с оригинала 2015-01-16. Извлечено 2016-08-08.
  18. ^ . F2PY.org… Извлечено 2011-12-18.
  19. ^ Фаулер, Мартин. .
  20. ^ Файяд, Мохаммед. .
  21. ^ Левин, Дональд А. (1991). Руководство программиста POSIX. O’Reilly & Associates, Inc. p. 1. ISBN 9780937175736. Извлечено 2 августа 2016года .
  22. ^ Уэст, Джоэл; Дедрик, Джейсон (2001). (PDF). Знания, Технологии и Политика. 14 (2): 88–112. Извлечено 2 августа 2016года .
  23. ^ Microsoft (октябрь 2001). . Microsoft. p. 4. Архивировано с оригинала 2009-09-26.
  24. ^ . Linux Foundation. 21 июня 2012года . 2015-03-27.
  25. ^ Стоутон, Ник (апрель 2005). (PDF). УСЕНИКС. Проверено 2009-06-04.
  26. ^ Бирхофф, Кевин (23 апреля 2009 года). (PDF). Институт программных исследований КМУ. Извлечено 29 июля 2016года .
  27. ^ Уилсон, М. Джефф (10 ноября 2000 года). . Яваворлд. Получено 2020-07-18.
  28. ^ Хеннинг, Мичи; Виноски, Стив (1999). Расширенное программирование CORBA на C++. Эддисон-Уэсли. ISBN 978-0201379273. Получено 16 июня 2015года .
  29. ^ (скачать PDF). www.hcltech.com. Август 2014 года.
  30. ^ Бенслиман, Джамаль; Шахрам Дустдар; Амит Шет (2008). . IEEE Internet Computing. Vol. 12, no. 5. Институт инженеров электротехники и электроники. Архивировано с оригинала на 2011-09-28 годы. Извлечено 2019-10-01.
  31. ^ Никколай, Джеймс (2008-04-23), , PC World
  32. ^ Парр, Бен. . Mashable. Извлечено 26 июля 2016года .
  33. ^ . developer.twitter.com. Проверено 2020-04-30.
  34. ^ Парнас, Д. Л. (1972). (PDF). Коммуникации АСМ. 15 (12): 1053–1058. doi:10.1145/361598.361623. S2CID 53856438.
  35. ^ Гарлан, Дэвид; Шоу, Мэри (январь 1994). (PDF). Достижения в области разработки программного обеспечения и Инженерии знаний. 1. Извлечено 8 августа 2016года .
  36. ^ де Терне, Геррик (10 октября 2015 года). . BoostCompanies. Извлечено 2016-02-01.
  37. ^ Бойд, Марк (2014-02-21). . ПрограммируеМаясеть . Извлечено 2 августа 2016года .
  38. ^ Вайсброт, Элисон (7 июля 2016 года). . AdExchanger.
  39. ^ . cloudflare. 25 февраля 2020года . Извлечено 27 февраля 2020года .
  40. ^ Liew, Zell (17 января 2018). . Сокрушительный журнал. Извлечено 27 февраля 2020года .
  41. ^ b Ши, Линь; Чжун, Хао; Се, Тао; Ли, Миншу (2011). Эмпирическое исследование эволюции документации API. Международная конференция по фундаментальным подходам к программной инженерии. Конспект лекций по информатике. 6603. стр. 416-431. doi:10.1007/978-3-642-19811-3_29. ISBN 978-3-642-19810-6. Извлечено 22 июля 2016года .
  42. ^ . 2014-02-04. Проверено 2014-02-11.
  43. ^ Oracle. . Документация Java SE. Извлечено 2 августа 2016года .
  44. ^ Мендес, Диего; Бодри, Бенуа; Монперрус, Мартин (2013). . 2013 IEEE 13th International Working Conference on Source Code Analysis and Manipulation (SCAM). pp. 43-52. arXiv:1307.4062. doi:10.1109/SCAM.2013.6648183. ISBN 978-1-4673-5739-5. S2CID 6890739.
  45. ^ Таканаси, декан (19 февраля 2020 года). . Рисковый Удар. Извлечено 27 февраля 2020года .
  46. ^ Dekel, Uri; Herbsleb, James D. (май 2009). Институт исследований программного обеспечения. Школа компьютерных наук. CiteSeerX 10.1.1.446.4214.
  47. ^ Парнин, Крис; Treude, Кристоф (май 2011). . Web2SE: 25-30. doi:10.1145/1984701.1984706. ISBN 9781450305952. S2CID 17751901. Извлечено 22 июля 2016года .
  48. ^ Maalej, Waleed; Robillard, Martin P. (апрель 2012). (PDF). IEEE Transactions on Software Engineering. Извлечено 22 июля 2016года .
  49. ^ Monperrus, Martin; Eichberg, Michael; Tekes, Elif; Mezini, Mira (3 декабря 2011). Эмпирическое исследование директив документации APIЭмпирическая Программная инженерия. 17 (6): 703–737. arXiv:1205.6363. doi:10.1007/s10664-011-9186-4. S2CID 8174618.
  50. ^ . Sun Microsystems. Архивирован с оригинала на 2011-09-25. Извлечено 2011-09-30..
  51. ^ Брух, Марсель; Мезини, Мира; Монперрус, Мартин (2010). 2010 7-я рабочая конференция IEEE по хранилищам программного обеспечения для майнинга (MSR 2010). Стр. 141-150. CiteSeerX 10.1.1.434.15. doi:10.1109/msr.2010.5463347. ISBN 978-1-4244-6802-7. S2CID 1026918.
  52. ^ . ДрДоббс. 2012-05-01. Проверено 2012-05-09.
  53. ^ . TGDaily. 2012-06-01. Проверено 2012-12-06.
  54. ^ (PDF). Wired. 2012-05-31. Извлечено 2013-09-22.
  55. ^ Cir. 2014.
  56. ^ Розенблатт. Сет (9 мая 2014). . CNET. Проверено 2014-05-10.
  57. ^ . Ars Technica. 2016-05-26. Извлечено 2016-07-28.
  58. ^ Декер, Сьюзен (27 марта 2018). . Bloomberg Businessweek. Получено 27 марта 2018года .
  59. ^ Ли, Тимоти (25 января 2019 года). . Ars Technica. Извлечено 8 февраля 2019года .
  60. ^ вкимбер (2020-09-28). . ЛИИ / Институт правовой информации. Получено 2021-03-06.

Дальнейшее чтение

  • Тайна Бухер (16 ноября 2013 года). . Вычислительная культура (3). ISSN 2047-2390. Утверждает. Что