API плагин. API плагин Плагин api

Плагин представляет собой динамически загружаемую библиотеку (DLL). После установки программы все плагины, входящие в дистрибутив, помещаются в каталог c:\Program Files (x86)\Common Files\Soft Gold\Inventory 14\Plugins\... Расширение *.abl необходимо для автоматической загрузки плагина из указанного каталога при запуске приложения. Плагин также можно загрузить из любого другого места на диске, указав в настройках путь поиска.

Инициализация API плагина

{ Delphi VCL Extensions }

{ Plugin interface for ABViewer/Inventory }

{ Copyright (c) 2002-2010 SoftGold software company }

{************************************************************}

unit sgPluginItem;

interface

implementation

XMLDocRef: IXMLDocument = nil;

ClientRef: IXMLNode = nil;

P: Pointer = nil;

PluginsHostWnd: HWND = 0;

PluginsHostWndName: string = "";

XMLAtomString: string = "";

procedure InitializeDoc;

begin

// получение уникального имени класса окна с параметрами

PluginsHostWndName:= Format("TsgPluginsHost:%.8X:%.8X", );

// нахождение непосредственно окна

PluginsHostWnd:= FindWindow(PChar(PluginsHostWndName), nil);

If PluginsHostWnd <> 0 then

Begin

// получение строки атома для получения параметра xml документа

XMLAtomString:= Format("XMLOfs%.8X%.8X",

XMLDocRef:= IXMLDocument(GetProp(PluginsHostWnd, PChar(XMLAtomString)));

If Assigned(XMLDocRef) then

Begin

// добавление элемента в список

ClientRef:= XMLDocRef.DocumentElement.ChildNodes.ChildNodes.AddChild(sClient);

// инициализация адреса функции Invoke

ClientRef.ChildValues["Invoke"] := IntToId(Integer(@Invoke)); // шестнадцатиричное $XXXXXXXX

End;

End;

end;

initialization

CoInitialize(P);

InitializeDoc;

Настройка и запуск демонстрационной версии плагина

Демонстрационная версия плагина настраивается автоматически при установке программы и подключается сразу после запуска Inventory. В состав пакета входит исходный текст компонента (имя проекта sgPlugin.dpk) и демонстрационная версия плагина (имя проекта plug1.dpr ).

Порядок запуска плагина из режима отладки:

▪ Открыть C:\Users\USER_NAME\Documents\Inventory 14\Plugins\Source\Delphi\Demos\Plug1\plug1.dpr

▪ Установить в опциях проекта:

Search Path : «..\..\Components\PlugItem»;

Output derectory , например: «c:\Program Files\Common Files\Soft Gold\Inventory 14\Plugins»;

Host application , на вновь установленное приложение, например: «c:\Program Files\Soft Gold\Inventory 14\Inventory 14.exe».

▪ Запустить на выполнение.

Для использования компонента в designtime необходимо открыть, перебилдить и инсталировать C:\Users\USER_NAME\Documents\Inventory 14\Plugins\Source\Delphi\Components\PlugItem\sgPlugin.dpk . После инсталяции компонента, в палитре компонентов Delphi, на закладке Soft Gold появится компонент TsgPluginItem, который можно использовать в designtime, т.е. помещать на форму.

Plugins are a key piece of the webpack ecosystem and provide the community with a powerful way to tap into webpack"s compilation process. A plugin is able to hook into key events that are fired throughout each compilation. Every step of the way, the plugin will have full access to the compiler and, when applicable, the current compilation .

For a high-level introduction to writing plugins, start with writing a plugin .

Let"s start by going over tapable utility, which provides the backbone of webpack"s plugin interface.

Tapable

This small library is a core utility in webpack but can also be used elsewhere to provide a similar plugin interface. Many objects in webpack extend the Tapable class. The class exposes tap , tapAsync , and tapPromise methods which plugins can use to inject custom build steps that will be fired throughout a compilation.

It is possible to customize the printed output by passing different arguments to the reportProgress function of ProgressPlugin .

To report progress, a plugin must tap into a hook using the context: true option:

Compiler. hooks. emit. tapAsync ({ name: "MyPlugin" , context: true } , (context, compiler, callback) => { const reportProgress = context && context. reportProgress; if (reportProgress) reportProgress (0.95 , "Starting work" ) ; setTimeout (() => { if (reportProgress) reportProgress (0.95 , "Done work" ) ; callback () ; } , 1000 ) ; } ) ;

The reportProgress function may be called with these arguments:

reportProgress (percentage, ... args) ;
  • percentage: This argument is unused; instead, ProgressPlugin will calculate a percentage based on the current hook.
  • ...args: Any number of strings, which will be passed to the ProgressPlugin handler to be reported to the user.

Note that only a subset of compiler and compilation hooks support the reportProgress function. See ProgressPlugin for a full list.

Logging

Logging API is available since the release of webpack 4.37. When logging is enabled in stats configuration and/or when infrastructure logging is enabled, plugins may log messages which will be printed out in the respective logger format (stats, infrastructure).

  • Plugins should prefer to use compilation.getLogger("PluginName") for logging. This kind of logging is stored in the Stats and formatted accordingly. It can be filtered and exported by the user.
  • Plugins may use the compiler.getInfrastructureLogger("PluginName") for logging. Using infrastructure logging is not stored in the Stats and therefore not formatted. It"s usually logged to the console/dashboard/GUI directly. It can be filtered by the user.
  • Plugins may use special fallback logic for detecting logging support compilation.getLogger ? compilation.getLogger("PluginName") : console to provide a fallback for cases when an older webpack version is used which does not support getLogger method on compilation object.

Next Steps

See the compiler hooks section for a detailed listing of all the available compiler hooks and the parameters they make available.

Excellent for ERP integration

This plugin is EXCELLENT, very useful to sync nopCommerce with ERP systems. It is, however, not complete and a little outdated. Download the source code and sample application from GitHub to add missing code.

MY PERSONAL EXPERIENCE

I used it for a customer that has been running a physical store for years and has only recently asked me to create the eCommerce site.
He already has a highly customized ERP system for maintaining commerce data, with more than 300 tables, including products and customers.
So although nopCommerce has a wonderful Admin panel he considered it an overhead maintaining two systems and asked me how long it would take to build an automatic one way sync mecchanism from his ERP to NopCommerce, for now constantly updating product prices and quantities.
I said I honestly didn"t know, I"d take one day to do some analysis, see what plugins were available and give him a more precise estimate by the end of the day.
Luckily I found this amazing plugin, downloaded the source code and accompanying sample. The API is easy to change as you simply mimic the database structure to provide any missing functionality. The sample is tougher as it"s very basic, but it does show how to call the API functions and how the token authentication mechanism works.
This is what I personally did:
1) Copied the sample MVC web application on a server on the intranet with IIS and created a CNAME record so that it could be accessed as http://nopSync
2) Gave it the same "look and feel" as the nopCommerce Admin panel by doing "view source" and referencing most of the same css files
3) Removed the login form and session variables, hard coded credentials in web.config and automatically authenticated on load
4) Used a SQL script to insert SKU and Manufacturer for all nopCommerce products. These two combined fields were my key to uniquely match products between the two systems
5) The api provides a "list" function to select all products but updates are performed one by one.
I could have read all the products and then with a loop accessed the ERP system each time, checking the price and quantity and updating nopCommerce if there were differences.
However, I considered it more performant to read all the nopCommerce data into a local database PRODUCTS table with a DoesItRequireUpdating flag by default equal to false.
The benefit of this was that the ERP system would only be accessed once. With a single query on the PRODUCTS table using a JOIN on ERP database tables I was able to update PRODUCTS prices, quantites and flags and subsequently call the update API once for each product with flag set to true.
6) I allowed for both manual and automatic syncronization. Manual by inserting a link to http://nopSync in the Admin panel menu and automatic by using a scheduled task to repeatedly call the web sample.

When the customer asked me, at the end of the day, how many days it would take to build the ERP syncronization, I said that thanks to SevenSpikes API plug it was online and syncronizing. Thanks SevenSpikes!!

Вышедшему в конце 2015. Однако, по большому счёту, только продвинутые разработчики нашли время, чтобы узнать, насколько мощным является это предложение.

Пакет WordPress REST API объединяет в себе все современные обновления, предоставляя встроенный API, который может быть интегрирован в темы, мобильные приложения и многое другое. Иными словами, он даёт возможность разработчикам разделять интерфейс фронтэнда от управления данными, позволяет любому приложению взаимодействовать с WordPress. Изучение работы этого инструмента может открыть двери для почти бесконечных возможностей расширения вашего сайта WordPress.

В этой статье, мы представим вам проект WordPress REST API, разъясним, чем он так хорош, потом предложим несколько идей его использования. Поэтому не теряем время и начинаем!

Знакомство с WordPress REST API

Проект WordPress REST API (REST от англ. Representational State Transfer – «передача состояния через представления») подтверждает, что WordPress делает шаги к тому, чтобы стать полноценной платформой приложений. Его наличие – это неоспоримое доказательство, поскольку оно добавляет стандартный REST API к ядру WordPress.

Проект вначале был загружен на GitHub для разработчиков в 2013 разработчиками Ryan McCue и Rachel Baker . Независимый плагин REST API был встроен в ядро WordPress в декабре 2015 , после того, как получил огромную поддержку и привлёк около 100 участников, желающих работать над улучшением его возможностей.

С момента, когда WordPress API REST стал частью ядра, он доказал свою эффективность. Вот лишь несколько реальных примеров для наглядности применения и вдохновения в своих проектах:

  1. Event Espresso применяет REST API для обеспечения доступа разработчикам к их международной инфраструктуре, позволяя разрабатывать приложения, с применением их сервисов.
  2. Simmer разрешает разработчикам доступ к API в целью расширения своей функциональности в полноценное мобильное приложение или настраивания тем.
  3. JoinIn предоставляет собственный виджет «встраиваемый» с использованием REST API, заполняя его соответствующими данными везде, где он отображается.

Это лишь верхушка айсберга, когда речь идет об инновационных целях REST API. Однако давайте обсудим, как работает сам REST API.

Как работает WordPress REST API

Если кратко, то REST API работает посредством манипулирования текстовыми данными из одного места в другом без прямого доступа к базе данных или интерфейсу пользователя. Существует много типов API (Application Programming Interfaces), несмотря на это REST остаётся современным и актуальным стандартом .

REST API передаётся через точки доступа Hyper Text Transfer Protocol (HTTP), используя формат JavaScript Object Notation (JSON). Говоря проще, эти технологии обеспечивают доступ к API используя уникальные веб адреса для доставки данных, которые ведут себя как объекты JavaScript .

Если вы никогда не работали с JavaScript или их определением объектов изучите основы JSON . Теперь, когда немного прояснили с понятием REST API, давайте поговорим о том, какое большое влияние он может оказать на процесс разработки с применением WordPress.

Какое значение WordPress REST API имеет для разработчиков

WordPress REST API – это универсальный интегратор любой инсталляции WordPress с любым приложением на веб-сервере или вашей операционной системе. В итоге, это означает, что единственным ограничением того, что можно построить с помощью WordPress, является лишь наше воображение. Вы можете создавать любое приложение, написанное на любой платформе или языке и использовать WordPress для обработки данных через REST API. Огромные возможности открываются благодаря открытому и дружественному сообществу WordPress.

REST API базируется на JavaScript, внимание к которому всё возрастает, это намекает нам на то, какие языки программирования важно знать. Скоро вы обнаружите, что JavaScript стороны сервера – это новый PHP. Это уже может быть видно на новом ПО WordPress.com, Calypso , который работает полностью на JavaScript и REST API.

Стандартизируя, способ взаимодействия приложений (включая ядро WordPress) с данными WordPress, разработка под WordPress станет проще и интуитивно понятнее. Более того, это облегчит интеграцию со сторонними платформами.

Надеюсь, теперь у вас появилось больше аргументов в пользу того, зачем важно начать изучать использование этой технологии уже сейчас. Пришло время сделать первые шаги по использованию REST API в вашей собственной работе!

5 Шагов для старта с WordPress REST API

Как мы рассмотрели раньше, REST API может быть использован с любым приложением или любым языком программирования, которым может вызывать HTTP ресурсы. Мы сосредоточимся на использовании командной строки для выполнения запросов REST API, потому что это самый простой метод с минимальной вероятностью допустить ошибки, которые могут отвлекать от процесса обучения.

Для этого нужно открыть программу с интерфейсом командной строки (Command Line Interface CLI) на вашем компьютере – терминал на macOS или Linux и командную строку на Windows. CLI позволяет напрямую взаимодействовать с REST API, без необходимости писать дополнительные скрипты для запроса и обработки информации. Любой запрос, который вы пишете в CLI может быть сценарием на PHP, JavaScript и другом языке, но метод будет отличаться для каждого. В CLI прямое выполнение команд. Просто введите нужную команду и нажмите Enter.

Мы также рекомендуем настроить демонстрационный сайт или тестировать локально, а не пробовать эти шаги на живом сайте. И наконец, ещё все одно условие, чтобы версия WordPress у вашего сайта была 4.4 или выше. Если вы готовы, то давайте начинать!

Шаг 1: Знакомимся с основными понятиями REST API

Прежде чем начнём, давайте ознакомимся с ключевыми понятиями REST API . Всего пять основных понятий и терминов, с которыми следует познакомиться. Давайте их рассмотрим:

  1. Маршруты (‘Routes’) и Ресурсы или точки доступа (‘Endpoints’). Это наиболее важный аспект в понимании REST API. Маршруты помогают вам перемещаться между вашими ресурсами, когда определенный HTTP-метод (например, статический набор данных или действие) подключен к определенному маршруту. Например, /wp-json/ – это маршрут, настроенный как ресурс, созданный для отображения нам доступных маршрутов.
  2. Запросы (Requests). Они создаются путем запуска правильных ресурсов и прохождения данных.
  3. Ответ (Responses). Вкратце, предоставление данных, которые вы запросили или возвращение ошибки, чтобы дать вам знать, что что-то пошло не так.
  4. Схемы (Schemas). Ниже приведены ответы шаблонов, поэтому вы всегда точно знаете, где искать нужные данные.
  5. Классы контроллеров (Controller classes). Они позволяют создавать собственные маршруты и ресурсы. Пока вам не нужно беспокоиться об этом, они станут более полезными в дальнейшем.

Как только вы поймете эти пять концепций, вы можете начать углубляться в сам API REST, начиная с его точек доступа.

Шаг 2: Узнаём наиболее полезные точки доступа REST API

WordPress REST API предлагает reference handbook со всеми точками доступа (ресурсами), где вы сможете найти наиболее полезные для себя. Прежде всего, нужно знать, как построить HTTP-вызов API REST. Базовая часть любого вызова API-интерфейса WordPress выглядит следующим образом, замените yourdomain.com своим:

Http://yourdomain.com/wp-json/

Вы можете проверить соединение, выполнив команду curl в своем CLI, используя свой собственный URL-адрес:

Curl -X OPTIONS -i http://yourdomain.com/wp-json/

В ответ вас должно поприветствовать сообщение от HTTP . Дальше можно модифицировать эту команду, используя некоторые из главных ресурсов. Теперь мы просто используем версию GET curl.

Чтобы получить JSON список ваших публикаций в WordPress, можно использовать следующее:

Вслед за этим, попробуйте следующее, чтобы проверить все существующие страницы WordPress:

Curl -X GET -i http://yourdomain.com/wp-json/wp/v2/pages

Вы можете поэкспериментировать с каждой из этих точек доступа (и больше!) в CLI, чтобы рассмотреть какой ответ выдаёт каждый из них.

Шаг 3: Изучаем основы аутентификации REST API

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

Начнём с установки плагина WordPress REST API Basic Auth . Это простой плагин для разработчиков, который поможет изучить REST API быстро, и не предназначен для реальных сайтов. Однако, процесс установки такой же как и у любого другого плагина.

Как только Basic Auth установлен, вы сможете выполнять аутентификацию через CLI с флагом user . Вот пример того, как применить метод аутентификации пользователя, используя curl для просмотра неопубликованных записей:

Curl -X GET --user username:password -i http://yourdomain.com/wp-json/wp/v2/posts?status=draft

Аутентификация потребуется для любой другой операции, кроме просматривания публичной информации. Как только вы наловчитесь с базовой аутентификацией, вы сможете раскрыть другие опции, рекомендуемые документацией REST API для вашей разработки.

Шаг 4: Выбираем свою первую публикацию WordPress при помощи REST API

Когда вы поймете, как делать базовые вызовы API REST с помощью curl, попробуйте выбрать конкретную запись. Вначале выведем все публикации, как мы это делали ранее:

Curl -X GET -i http://yourdomain.com/wp-json/wp/v2/posts

Вы можете использовать этот примем с добавлением ID для любого ресурса REST API, независимо от того, вы хотите отобразить публикацию, страницу или таксономию.

Шаг 5: Вносим изменения в публикацию в WordPress через REST API

И наконец, давайте попробуем внести изменения в выбранную вами публикацию. Вместо команд OPTION или GET , в этот раз будем использовать POST для внесения изменений. GET используется для чтения данных, в то время как POST – для их отправки.

Давайте переименуем вашу публикацию отправкой запроса POST вместе с данными для аутентификации. Новые изменения будут внесены с использованием флага d в конце команды. Будем передавать пользовательский JavaScript объект устанавливая переменную title на своё значение, такое как My New Title , как показано в коде ниже:

Curl -X POST --user username:password http://yourdomain.com/wp-json/wp/v2/posts/ -d "{"title":"My New Title"}"

Убедитесь, что вы заменили имя пользователя, пароль и ID публикации, а также название на свои. Вы можете выбрать ещё раз заданную публикацию для проверки изменений:

Curl -X GET -i http://yourdomain.com/wp-json/wp/v2/posts/

Поздравляем! Вы только что сделали свои первые админ правки, используя WordPress REST API. Конечно, это базовое руководство только едва касается возможностей, предоставляемых REST API, но для начала это весьма решительные шаги!

Заключение

WordPress REST API – новая мощная версия ядра WordPress и многие разработчики уже начали применять её возможности. Соответственно, ознакомившись сейчас с тем, как работать с новой возможностью, вы повысите свои программистские навыки и сможете создать приложение используя WordPress как фреймворк.

Напомним, мы прошли пять шагов на пути к изучению взаимодействия с WordPress REST API:

  1. Знакомство с основными понятиями REST API.
  2. Наиболее полезные ресурсы/точки доступа REST API.
  3. Изучение основ аутентификации REST API.
  4. Получение публикации на WordPress, используя REST API.
  5. Изменение публикации WordPress, используя REST API.

Какие у вас возникли вопросы по поводу WordPress REST API? Пишите нам в комментариях!