<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Web Api on Louis&#39;s blog</title>
        <link>https://blog.louishhy.com/tags/web-api/</link>
        <description>Recent content in Web Api on Louis&#39;s blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <copyright>Louis Huang</copyright>
        <lastBuildDate>Thu, 22 May 2025 02:48:59 +0000</lastBuildDate><atom:link href="https://blog.louishhy.com/tags/web-api/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>关于ClientWebAPI</title>
        <link>https://blog.louishhy.com/post/about-client-web-api/</link>
        <pubDate>Thu, 22 May 2025 02:48:59 +0000</pubDate>
        
        <guid>https://blog.louishhy.com/post/about-client-web-api/</guid>
        <description>&lt;p&gt;看到了Hono.JS的介绍，
其中有一个部分是它可以 run everywhere，因为其使用了Web API Standard。&lt;/p&gt;
&lt;p&gt;正好自己之前对这些Web API一知半解，所以简单复习了一部分。&lt;/p&gt;
&lt;h2 id=&#34;dom--bom-manipulation&#34;&gt;DOM / BOM Manipulation
&lt;/h2&gt;&lt;p&gt;主要是利用了&lt;code&gt;document&lt;/code&gt;、&lt;code&gt;window&lt;/code&gt;等对象来操作DOM和BOM。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;document&lt;/code&gt;：提供操作文档的方法。例如&lt;code&gt;querySelector&lt;/code&gt;、&lt;code&gt;getElementById&lt;/code&gt;等。通过这种script可以让网页动态化等等。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;window&lt;/code&gt;：表示浏览器窗口的对象，可以知道比如说窗口的dimension，也可以操作例如滚动窗口到哪些地方。一些event handler也是直接绑在window上。
&lt;ul&gt;
&lt;li&gt;也因此复习了一下可以监听的events，例如&lt;code&gt;scroll&lt;/code&gt;。使用&lt;code&gt;addEventListener&lt;/code&gt;可以绑定事件处理函数，&lt;code&gt;removeEventListener&lt;/code&gt;可以解绑事件处理函数避免内存泄漏。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;history&lt;/code&gt;：表示浏览器的历史记录，可以用来操作浏览器的前进后退等功能。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;fetch-api&#34;&gt;Fetch API
&lt;/h2&gt;&lt;p&gt;应该是后端接触最多的一种API了。
&lt;code&gt;Request&lt;/code&gt;和&lt;code&gt;Response&lt;/code&gt;是两个最重要的对象。&lt;/p&gt;
&lt;p&gt;二者基本上都可以调用类似的方法来进行解析。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.formData()&lt;/code&gt;：将数据解析为&lt;code&gt;FormData&lt;/code&gt;对象，文件也会被自动解析为&lt;code&gt;File&lt;/code&gt;对象。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.json()&lt;/code&gt;：将JSON数据解析为JavaScript对象。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.text()&lt;/code&gt;：将文本数据解析为字符串。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.arrayBuffer()&lt;/code&gt;：将数据解析为&lt;code&gt;ArrayBuffer&lt;/code&gt;对象。（可以用来直接处理二进制数据）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;除此之外&lt;code&gt;Response&lt;/code&gt;还有&lt;code&gt;.ok&lt;/code&gt;、&lt;code&gt;.status&lt;/code&gt;、&lt;code&gt;.statusText&lt;/code&gt;等属性可以用来判断请求是否成功。&lt;/p&gt;
&lt;p&gt;另外一般地，如果没有特殊需求的情况下，基本上API endpoint都是用&lt;code&gt;json&lt;/code&gt;或&lt;code&gt;multipart/form-data&lt;/code&gt;来传输数据，比较少直接传输二进制数据或者单纯的text。&lt;/p&gt;
&lt;h2 id=&#34;local-storage-和-session-storage&#34;&gt;Local Storage 和 Session Storage
&lt;/h2&gt;&lt;p&gt;存储在浏览器中的key-value pair，每一个origin都有自己的独立存储空间。
不同的是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;localStorage&lt;/code&gt;：存储的数据在浏览器关闭后仍然存在，除非被purge。多个同origin的tab之间是共享的。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sessionStorage&lt;/code&gt;：存储的数据在浏览器关闭或标签页关闭后会被删除。按照标签页隔离。&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
