Екипът Obsidian и Open Source Labs са развълнувани да обявят пускането на Obsidian 3.1. Тази последна версия включва нови основни функции и актуализации за сигурност.

Какво е обсидиан?

Obsidian е първият собствен клиентски и сървърен модул за кеширане на GraphQL на Deno. Obsidian е оборудван със светкавично нормализирано кеширане, за да поддържа мащабируеми, високопроизводителни SSR React приложения, създадени с Deno. С други думи, Apollo е за Node.js, както Obsidian е за Deno.

Какво е новото в 3.1?

  1. Променливи на GraphQL

Obsidian вече поддържа кеширане за динамични GraphQL заявки, съдържащи променливи. Алгоритъмът за деструктуриране на Obsidian отчита интелигентно променливите, като ги замества със съответните им стойности и кешира модифицираната заявка заедно с нейния резултат, за да оптимизира още повече следващите заявки. Разработчиците не трябва да модифицират съществуващ код, за да се възползват от тази актуализация, тъй като промените са пасивни и без прекъсване.

2. Директиви за GraphQL

Obsidian вече поддържа кеширане за динамични GraphQL заявки, съдържащи директиви, предоставяйки начин за украсяване на заявки с допълнителна конфигурация, така че Obsidian да може да изпълнява персонализирана логика, преди заявката да достигне до изпълнителя на GraphQL. Obsidian отчита единични основни директиви на GraphQL, а именно @skip и @include, и решава дали да запази или пропусне конкретното поле въз основа на стойностите на променливата. След това модифицираната заявка заедно с нейния резултат се кешира, за да се оптимизират следващите заявки. Вижте този фрагмент от код, за да видите Obsidian в действие.

Входяща заявка с директива true или false.

// Query Variables Object:
{
  "episode": "2",
  "withFriends": true
}

// Query String:
query Hero($episode: Episode, $withFriends: Boolean!) {
  hero (episode: $episode) {
    name
    friends @include(if: $withFriends) {
      name
    }
  }
}

След анализиране, когато ($withFriends = true).

// Query String:
 
query Hero($episode: Episode, $withFriends: true) {
  hero (episode: $episode) {
    name
    friends {
      name
    }
  }
}

След анализиране, когато ($withFriends = false).

// Query String:
query Hero($episode: Episode, $withFriends: false) {
  hero (episode: $episode) {
    name
  }
}

3. Сигурност: Ограничител на дълбочината на заявката

3.1 въвежда първия компонент за сигурност в библиотеката Obsidian. GraphQL даде на разработчиците мощен инструмент за отправяне на заявки към бекенда, но също така добавя риск към бекенда, тъй като злонамерени клиенти може да се опитат да се възползват от гъвкавостта и силата, дадени на клиентите. Obsidian вече поддържа възможността за ограничаване на дълбочината на заявките и предотвратяване на прекалено сложни, вложени заявки от обвързване на ресурсите на вашия сървър. Това ефективно предотвратява DoS атаки под формата на рекурсивно вложени полета, които стават експоненциално по-сложни с всяко ниво на влагане.

4. Семантични версии

Тъй като наборът от функции на Obsidian става все по-пълен, ние преминаваме към семантична версия, започвайки с днешната версия. Obsidian 3.1.0 въвежда нова функционалност без нарушаващи API промени и пълна обратна съвместимост.

Първи стъпки

За да използвате Obsidian в следващия си проект, ще намерите обширна документация за започване на работа на „obsidian.land“. Вижте нашата интерактивна демонстрация тук.

Obsidian е продукт с отворен код, разработен от технологичния ускорител OS Labs. За да допринесете и да оставите обратна връзка, разгледайте нашия GitHub. Вълнуваме се да видим какво ще донесе общността на Obsidian.

Съавторство от Team Obsidian:

Кюнг Ли | GitHub | LinkedIn

Джъстин Маккей| GitHub | LinkedIn

Реймънд Ан | GitHub | LinkedIn

Камерън Симънс | GitHub | LinkedIn

Патрик Съливан | GitHub | LinkedIn