2020-11-23〜2020-11-30
リスト
- ✅ Good Bye Web APIs - DEV
- ✅ なぜGoogle Meetの背景ぼかしが最強なのか(一般公開版)
- ✅ Automatically record puppeteer tests - Chrome DevTools - Dev Tips
- ✅ JavaScript 長いループ 分割 - hitode909の日記
- Back/forward cache
- WebAssembly integration with JavaScript BigInt · V8
- How To Secure Node.js Applications with a Content Security Policy | DigitalOcean
読んだ記事のメモ
Good Bye Web APIs - DEV
https://twitter.com/zaki___yama/status/1332208460318994434?s=20
こんな感じでバックエンド側でデータモデルとビジネスロジックに相当するメソッドを定義すると
// backend.js
import {
Component,
primaryIdentifier,
attribute,
method,
expose
} from '@layr/component';
import {ComponentHTTPServer} from '@layr/component-http-server';
class Counter extends Component {
// We need a primary identifier so a Counter instance
// can be transported between the frontend and the backend
// while keeping it's identity
@expose({get: true, set: true}) @primaryIdentifier() id;
// The counter value is exposed to the frontend
@expose({get: true, set: true}) @attribute() value = 0;
// And the "business logic" is exposed as well
@expose({call: true}) @method() increment() {
this.value++;
}
}
// Lastly, we serve the Counter class through an HTTP server
const server = new ComponentHTTPServer(Counter, {port: 3210});
server.start();
同じモデル、メソッドがフロントエンドでも利用できる
// frontend.js
import {ComponentHTTPClient} from '@layr/component-http-client';
(async () => {
// We create a client to connect to the backend server
const client = new ComponentHTTPClient('http://localhost:3210');
// We get a proxy to the Counter backend class
const Counter = await client.getComponent();
// Lastly, we consume the Counter
const counter = new Counter();
console.log(counter.value); // => 0
await counter.increment();
console.log(counter.value); // => 1
await counter.increment();
console.log(counter.value); // => 2
})();