JP2024075645A - 仮想ウェブページのプレビュー中におけるデータベースの編集 - Google Patents
仮想ウェブページのプレビュー中におけるデータベースの編集 Download PDFInfo
- Publication number
- JP2024075645A JP2024075645A JP2024040504A JP2024040504A JP2024075645A JP 2024075645 A JP2024075645 A JP 2024075645A JP 2024040504 A JP2024040504 A JP 2024040504A JP 2024040504 A JP2024040504 A JP 2024040504A JP 2024075645 A JP2024075645 A JP 2024075645A
- Authority
- JP
- Japan
- Prior art keywords
- website
- web page
- code
- data
- user
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 claims abstract description 287
- 230000006870 function Effects 0.000 description 253
- 238000012360 testing method Methods 0.000 description 252
- 239000008186 active pharmaceutical agent Substances 0.000 description 96
- 230000004044 response Effects 0.000 description 94
- 230000027455 binding Effects 0.000 description 70
- 238000009739 binding Methods 0.000 description 70
- 230000008569 process Effects 0.000 description 66
- 238000011161 development Methods 0.000 description 61
- 238000003860 storage Methods 0.000 description 46
- 238000010586 diagram Methods 0.000 description 39
- 230000015654 memory Effects 0.000 description 37
- 230000008859 change Effects 0.000 description 34
- 230000003993 interaction Effects 0.000 description 29
- 238000004891 communication Methods 0.000 description 27
- 230000007246 mechanism Effects 0.000 description 27
- 241001465754 Metazoa Species 0.000 description 26
- 238000012545 processing Methods 0.000 description 26
- 230000000007 visual effect Effects 0.000 description 24
- 238000010276 construction Methods 0.000 description 23
- 230000009471 action Effects 0.000 description 22
- 230000008676 import Effects 0.000 description 21
- 238000002955 isolation Methods 0.000 description 21
- 238000013507 mapping Methods 0.000 description 21
- 238000004364 calculation method Methods 0.000 description 18
- 238000013515 script Methods 0.000 description 18
- 230000003068 static effect Effects 0.000 description 18
- 238000013461 design Methods 0.000 description 15
- 235000014510 cooky Nutrition 0.000 description 13
- 230000002085 persistent effect Effects 0.000 description 13
- 244000035744 Hura crepitans Species 0.000 description 11
- 238000009877 rendering Methods 0.000 description 11
- 239000000243 solution Substances 0.000 description 10
- 230000001960 triggered effect Effects 0.000 description 10
- 238000012986 modification Methods 0.000 description 9
- 230000004048 modification Effects 0.000 description 9
- 238000004422 calculation algorithm Methods 0.000 description 8
- 238000012544 monitoring process Methods 0.000 description 8
- 230000006399 behavior Effects 0.000 description 7
- 230000000694 effects Effects 0.000 description 7
- 238000007726 management method Methods 0.000 description 7
- 239000000463 material Substances 0.000 description 7
- 241000282376 Panthera tigris Species 0.000 description 6
- 230000006978 adaptation Effects 0.000 description 6
- 238000004458 analytical method Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 6
- 238000010411 cooking Methods 0.000 description 6
- 235000021185 dessert Nutrition 0.000 description 6
- 235000021186 dishes Nutrition 0.000 description 6
- 238000004519 manufacturing process Methods 0.000 description 6
- 230000000737 periodic effect Effects 0.000 description 6
- 230000000717 retained effect Effects 0.000 description 6
- 230000003213 activating effect Effects 0.000 description 5
- 230000010354 integration Effects 0.000 description 5
- 235000012054 meals Nutrition 0.000 description 5
- HFHZKZSRXITVMK-UHFFFAOYSA-N oxyphenbutazone Chemical compound O=C1C(CCCC)C(=O)N(C=2C=CC=CC=2)N1C1=CC=C(O)C=C1 HFHZKZSRXITVMK-UHFFFAOYSA-N 0.000 description 5
- 239000000047 product Substances 0.000 description 5
- 241000282461 Canis lupus Species 0.000 description 4
- 238000013475 authorization Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 4
- 238000001914 filtration Methods 0.000 description 4
- 239000000203 mixture Substances 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000009987 spinning Methods 0.000 description 4
- 238000010200 validation analysis Methods 0.000 description 4
- DBGIVFWFUFKIQN-UHFFFAOYSA-N (+-)-Fenfluramine Chemical compound CCNC(C)CC1=CC=CC(C(F)(F)F)=C1 DBGIVFWFUFKIQN-UHFFFAOYSA-N 0.000 description 3
- 235000001674 Agaricus brunnescens Nutrition 0.000 description 3
- VYZAMTAEIAYCRO-UHFFFAOYSA-N Chromium Chemical compound [Cr] VYZAMTAEIAYCRO-UHFFFAOYSA-N 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 235000019219 chocolate Nutrition 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 238000013480 data collection Methods 0.000 description 3
- 238000013501 data transformation Methods 0.000 description 3
- 230000007812 deficiency Effects 0.000 description 3
- 235000012020 french fries Nutrition 0.000 description 3
- 238000002347 injection Methods 0.000 description 3
- 239000007924 injection Substances 0.000 description 3
- 238000009434 installation Methods 0.000 description 3
- 235000013550 pizza Nutrition 0.000 description 3
- 238000000926 separation method Methods 0.000 description 3
- 230000026676 system process Effects 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- FMKJUUQOYOHLTF-OWOJBTEDSA-N (e)-4-azaniumylbut-2-enoate Chemical compound NC\C=C\C(O)=O FMKJUUQOYOHLTF-OWOJBTEDSA-N 0.000 description 2
- 241000239290 Araneae Species 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 235000020289 caffè mocha Nutrition 0.000 description 2
- 239000003795 chemical substances by application Substances 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 238000005538 encapsulation Methods 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 230000004927 fusion Effects 0.000 description 2
- 238000010348 incorporation Methods 0.000 description 2
- 208000015181 infectious disease Diseases 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 2
- 235000021184 main course Nutrition 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 230000001932 seasonal effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000001052 transient effect Effects 0.000 description 2
- 238000012800 visualization Methods 0.000 description 2
- 230000003442 weekly effect Effects 0.000 description 2
- DHSSDEDRBUKTQY-UHFFFAOYSA-N 6-prop-2-enyl-4,5,7,8-tetrahydrothiazolo[4,5-d]azepin-2-amine Chemical compound C1CN(CC=C)CCC2=C1N=C(N)S2 DHSSDEDRBUKTQY-UHFFFAOYSA-N 0.000 description 1
- 229920000742 Cotton Polymers 0.000 description 1
- 241001417516 Haemulidae Species 0.000 description 1
- 206010020751 Hypersensitivity Diseases 0.000 description 1
- 241000885184 Scaris Species 0.000 description 1
- 241001178520 Stomatepia mongo Species 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 208000026935 allergic disease Diseases 0.000 description 1
- 230000007815 allergy Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000001174 ascending effect Effects 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000003542 behavioural effect Effects 0.000 description 1
- 235000021152 breakfast Nutrition 0.000 description 1
- 235000013544 chili con carne Nutrition 0.000 description 1
- 238000005352 clarification Methods 0.000 description 1
- 235000013365 dairy product Nutrition 0.000 description 1
- 238000013479 data entry Methods 0.000 description 1
- 238000013523 data management Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013502 data validation Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 235000011850 desserts Nutrition 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 239000012467 final product Substances 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000008571 general function Effects 0.000 description 1
- 230000003116 impacting effect Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 235000012830 plain croissants Nutrition 0.000 description 1
- 238000012913 prioritisation Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- ZLIBICFPKPWGIZ-UHFFFAOYSA-N pyrimethanil Chemical compound CC1=CC(C)=NC(NC=2C=CC=CC=2)=N1 ZLIBICFPKPWGIZ-UHFFFAOYSA-N 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000005316 response function Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000005096 rolling process Methods 0.000 description 1
- 238000013341 scale-up Methods 0.000 description 1
- 230000007480 spreading Effects 0.000 description 1
- 238000003892 spreading Methods 0.000 description 1
- 230000008093 supporting effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 229950008418 talipexole Drugs 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/14—Tree-structured documents
- G06F40/143—Markup, e.g. Standard Generalized Markup Language [SGML] or Document Type Definition [DTD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/951—Indexing; Web crawling techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/955—Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/955—Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
- G06F16/9558—Details of hyperlinks; Management of linked annotations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/958—Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/958—Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
- G06F16/972—Access to data in other repository systems, e.g. legacy data or dynamic Web page generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/128—Restricting unauthorised execution of programs involving web programs, i.e. using technology especially used in internet, generally interacting with a web browser, e.g. hypertext markup language [HTML], applets, java
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/53—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0484—Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
- G06F3/0486—Drag-and-drop
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/103—Formatting, i.e. changing of presentation of documents
- G06F40/106—Display of layout of documents; Previewing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
- G06F40/186—Templates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/33—Intelligent editors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/34—Graphical or visual programming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/535—Tracking the activity of the user
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/60—Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
- H04L67/63—Routing a service request depending on the request content or context
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computer Security & Cryptography (AREA)
- Data Mining & Analysis (AREA)
- Computer Hardware Design (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computational Linguistics (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- General Health & Medical Sciences (AREA)
- Technology Law (AREA)
- Multimedia (AREA)
- Human Computer Interaction (AREA)
- Information Transfer Between Computers (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Processing Or Creating Images (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
【課題】ウェブサイトの複数のウェブページに投入されるデータセットを含むバックエンドデータベースを更新する方法及びシステムを提供する。【解決手段】方法は、複数のデータ要素をユーザインターフェースを介して受信することと、データ要素のグループをデータベースに格納することと、複数の仮想ウェブページを生成することと、を含む。各仮想ウェブページは、対応する実際のウェブページが稼働する前における、対応する実際のウェブページのプレビューである。方法はまた、複数の仮想ウェブページのうちの個別のページにデータ要素の各グループを表示することと、ユーザが複数の仮想ウェブページからの仮想ウェブページを編集できるように編集ツールを表示することと、仮想ウェブページに対する編集をデータベースのための更新に変換することと、データベースを更新した状態で対応する実際のウェブページを表示できるようにすることと、を含む。【選択図】図26
Description
関連出願の相互参照
本出願は、2017年7月24日に出願された米国特許仮出願第62/536,403号および2018年7月23日に出願された米国特許仮出願第62/702,278号の優先権を主張するものであり、同仮出願は共に、その全体が参照により本明細書に組み込まれる。
本出願は、2017年7月24日に出願された米国特許仮出願第62/536,403号および2018年7月23日に出願された米国特許仮出願第62/702,278号の優先権を主張するものであり、同仮出願は共に、その全体が参照により本明細書に組み込まれる。
本出願はまた、一般に以下の出願、すなわち、2012年8月28日に出願された米国特許出願第13/596,146号、2013年2月20日に出願された米国特許出願第13/771,119号、2013年2月28日に出願された米国特許出願第13/779,798号、2013年3月6日に出願された米国特許出願第13/786,488号、2013年8月6日に出願された米国特許出願第13/959,759号、2016年11月1日に出願された米国特許出願第15/339,984号、2013年10月15日に出願された米国特許出願第14/053,614号、2016年8月11日に出願された米国特許出願第15/233,987号、2014年2月10日に出願された米国特許出願第14/176,166号、2014年3月13日に出願された米国特許出願第14/207,761号、2014年9月11日に出願された米国特許出願第14/483,981号、2014年12月4日に出願された米国特許出願第14/559,943号、2015年2月11日に出願された米国特許出願第14/619,903号、2017年9月18日に出願された米国特許出願第15/706,789号、2014年3月13日に出願された米国特許出願第14/207,930号、2017年7月23日に出願された米国特許出願第15/657,156号、2015年4月29日に出願された米国特許出願第14/699,828号、2017年7月19日に出願された米国特許出願第15/653,568号、2015年10月29日に出願された米国特許出願第14/926,007号、2015年2月11日に出願された米国特許出願第14/619,145号、2017年9月19日に出願された米国特許出願第15/708,160号、2016年5月31日に出願された米国特許出願第15/168,295号、2016年6月7日に出願された米国特許出願第15/175,272号、2016年7月31日に出願された米国特許出願第15/224,616号、2016年10月13日に出願された米国特許出願第15/292,172号、2016年7月31日に出願された米国特許出願第15/224,579号、2018年6月6日に出願された米国特許出願第16/000,907号、2017年5月29日に出願された米国特許出願第15/607,586号、2017年7月27日に出願された米国特許出願第15/661,342号、2017年12月21日に出願された米国特許出願第15/850,151号、2018年6月7日に出願された米国特許出願第16/002,356号、2017年11月28日に出願された米国特許仮出願第62/591,297号、2018年2月1日に出願された米国特許仮出願第62/624,824号、2018年2月4日に出願された米国特許仮出願第62/626,093号、および2018年2月25日に出願された米国特許仮出願第62/647,736号に関連し、その全体を参照により組み込む。
本開示は、サードパーティによって完全に管理されるシステムで稼働するカスタムバックエンド機能を組み込むインデックス可能なウェブサイトおよびウェブアプリケーションを構築するためのウェブサイト構築システムに関する。例えば、実施形態は、システムのユーザがクライアントとサーバとのやり取りの管理に関与する必要なしに、フロントエンドコンポーネントまたはシステムアクティビティに関連付けられたプログラム可能なイベントがトリガされたときにステートレスサーバ環境(コンテナ、サーバレスコード、また
は仮想マシンなど)で実行され得るカスタムバックエンド機能を開発することを含む。
は仮想マシンなど)で実行され得るカスタムバックエンド機能を開発することを含む。
さらに、本開示は、ウェブサイトまたは個々のウェブページのオンデマンド実行インスタンスを即時に提供することによる、ウェブサイトの負荷のホストおよび管理に関する。インスタンスは、いくつかの実施形態では、仮想マシン、コンテナ、またはサーバレスコード要素としてスピンアップされ得る。より具体的には、本開示は、ウェブサイトを提供する要求に応答する際に著しい遅延なしに、システムでホストされるウェブサイトを提供するインスタンスを自動的に追加および除去するために、ホストされるウェブサイトの負荷およびアクティビティを監視するためのシステムおよび方法に関する。さらに、ホストされるウェブサイトは、汎用コードとウェブサイト固有コードとの組み合わせを含み得る。
またさらに、本開示は、ウェブサイトおよびウェブサイトにリンクされたデータのエンドユーザのための、およびそのエンドユーザによるプロダクション環境で生成されたデータにリアルタイムでアクセス可能なウェブサイトの視覚化およびテストに関する。より具体的には、本開示は、ウェブサイトの開発者または設計者がウェブサイトの機能およびエクスペリエンスをテストするための、ウェブサイトのエンドユーザが通常見るデータへのアクセスの提供に関する。
さらに、本開示は、仮想ウェブページのプレビュー中におけるデータベースの編集に関する。例えば、ユーザはデータベースにデータ要素(例えば、テキスト、グラフィックス、ビデオなど)のグループを格納することができ、1つまたは複数の仮想ウェブページがウェブページのプレビューを表示するために生成され得る。仮想ウェブページの表示中に、ユーザは仮想ウェブページを編集でき、ユーザによる編集がデータベースのための更新に変換され得る。さらに、仮想ウェブページに対応する実際のウェブページのライブビュー中に、データベースに対する更新を表示されたライブビューに反映させることができる。
本明細書で開示されるウェブサイト構築システムは、ソフトウェア開発経験および/またはリソースの限られている人々がカスタマイズされたウェブサイトを開発およびホストできるようにするために使用される。一方、従来のウェブサイト開発システムは、外部サービスに対する呼び出しまたはサーバサイドコードを呼び出す埋め込みコードスニペットを介したバックエンド制御を持たないか制限されているテンプレートフロントエンドUIを提供するため、このシステムは、データ操作または他のカスタム機能のオプションを持たないかそれが最小限であるウェブページに制限される。他のシステムでは、完全なバックエンド制御にアクセスするためには、クライアントとサーバとのやり取りのセットアップに最大限に関与することが求められる。
従来のウェブサイト開発システムには、データが投入されるウェブページのレイアウトを作成して、インデックスされ得る複数の動的ページを作成する機能がない。さらに、従来のシステムには、ユーザがウェブページにアクセスしたりウェブページと対話したりする仕方に応じて、ウェブページに異なるコンテンツや機能を異なって含めることができる、ウェブページのためのソフトウェアベースのルータを組み込む機能がない。また従来のシステムには、ウェブサイトのユーザの対話を監視し、それらの対話に関連付けられた以前に登録された機能に基づいて結果の出力を示す機能もない。
従来のマネージドウェブサイトホスティングシステムは、準備ができていて運転可能な状態を維持するために多額の費用およびリソースがかかる専用サーバを使用するか、新しいウェブサイトが要求された場合や要求に応答するのに特定のウェブサイトの負荷が一定の遅延閾値を超えた場合に新しいインスタンスのコールドスタートを用いるかのいずれか
によりウェブサイトへの要求を処理するために使用される。ウェブサイトまたはウェブページの新しいインスタンスをコールドスタートするこのようなプロセスは、大幅な処理遅延および結果として生じるユーザエクスペリエンスにおける待ち時間を伴う。
によりウェブサイトへの要求を処理するために使用される。ウェブサイトまたはウェブページの新しいインスタンスをコールドスタートするこのようなプロセスは、大幅な処理遅延および結果として生じるユーザエクスペリエンスにおける待ち時間を伴う。
従来のウェブサイト開発システムはまた、ユーザがページのプレビューを動的に編集できるようにする能力の点でも制限されている。そのようなシステムはまた、プレビューされたページの編集を受信することも、それらの編集をページの全部または一部が基づいているデータベースに対する更新に変換することもできない。その結果、このような従来のシステムを使用することには、より多くのユーザのアクション、より多くの帯域幅、およびより多くの面倒な操作を伴う。
本明細書で開示されるウェブサイトテストシステムは、エンドユーザのエクスペリエンスに支障をきたすことなく、エンドユーザがウェブサイトを使用する現実的なエクスペリエンスを作り出すようにセットアップされ得る。しかしながら、従来のウェブサイトテストシステムでは、エンドユーザがウェブサイトを体験するようにサイトをレビューするための制限付きのプレビューインターフェースが提供されるが、テスト対象のウェブサイトで生成されたデータにはリアルタイムアクセスを提供する方法を持たない。また従来のシステムには、エンドユーザエクスペリエンスに影響を与えることなく、新しいデータを追加したり、サイトに対して生成されたデータを削除したりする機能がない。
従来のウェブサイトホスティングシステムはまた、悪意のあるコード(例えば、マルウェア)を含むプラグイン(例えば、ウェブサイトのフロントエンドまたはバックエンドに組み込まれ得るソフトウェア)に対しても脆弱である。そのようなコードが1人のウェブサイト所有者またはユーザによってアップロードされると、そのようなコードは、ウェブサイトホスティングシステムを介して拡散し、他の所有者またはユーザのウェブサイトに影響を及ぼす可能性がある。従来のウェブサイトホスティングシステムには、アップロードされたプラグインを分離し、システムが共通してホストする他のウェブサイトへの感染を防ぐ機能がない。
したがって、バックエンド機能を管理するためであり、ウェブサイトをさらにカスタマイズできる自由を提供するためであり、サーバのセットアップ、プロビジョニング、またはサーバとクライアントとのやり取りにユーザを関与させることのない、新しいウェブサイト開発システムのための技術的解決策が求められている。ユーザがウェブサイト全体を一からコーディングする必要なしに、カスタマイズされたコーディング機能などにより、カスタマイズされたウェブサイトを構築するための技術ツールをユーザに提供することがさらに求められている。
さらに、ウェブサイトへの要求を著しい遅延なく処理する新しいオンデマンドシステムのための技術的解決策が求められている。このような技術的解決策では、仮想マシン、コンテナ、サーバレスコードなどの仮想コンピューティングリソースを利用する必要がある。さらに、このような解決策では、多くのページまたはサイトに共通する機能と、特定のページまたはサイトに一意の機能と、の両方を含む、高度にカスタマイズされたウェブサイトを可能にするはずである。
またさらに、プロダクションの際に利用可能なデータにリアルタイムでアクセスできる新しいウェブサイトテストシステムのための技術的解決策も求められている。
加えて、アップロードされたプラグインを分離し、共同ホストされたウェブサイトにそれらが感染を広げるのを防ぐための技術的解決策が求められている。そのような技法は、
フロントエンドとバックエンドとの両方のプラグインを分離できる一方で、ウェブサイト所有者およびユーザがそのようなプラグインを依然としてアップロードおよび利用できるようにする必要がある。
フロントエンドとバックエンドとの両方のプラグインを分離できる一方で、ウェブサイト所有者およびユーザがそのようなプラグインを依然としてアップロードおよび利用できるようにする必要がある。
本開示の特定の実施形態は、ウェブサイトを構築するためのシステムに関する。本システムは、ウェブサイト構築者が、一元的にホストされるウェブサイトにバックエンド機能を追加できるように構成されたオンラインウェブサイト構築システムを含むことができ、一元的にホストされるウェブサイトは、検索エンジンによりインデックス可能な1つまたは複数のウェブページを含む。オンラインシステムは、ページの編集および動的プレビューにおいて共通のオンラインデータベースを使用できるようにし、共通のオンラインデータベースには、設計者およびユーザが同時にアクセスし得る。本システムは、インデックス可能なウェブページのフロントエンドを構成するためのウェブサイト構築要素のライブラリを格納するように構成されたオンラインデータベースと、特定の動作を実行するように構成された少なくとも1つのプロセッサと、を備え得る。動作は、ユーザのリモートウェブブラウザに第1の命令を送信することであって、第1の命令は、ユーザが、リモートウェブブラウザにより表示可能な統合インターフェースを介して、格納されたライブラリにリモートでアクセスできるようにし、かつユーザが、インデックス可能なウェブページのフロントエンドを構築するための構築要素のうちの選択したものを利用できるようにし、統合インターフェースが、構築要素とインデックス可能なウェブページに関連付けられたカスタマイズされたバックエンド機能との両方へのアクセスをユーザに提供する、ことと、リモートウェブブラウザにより表示可能な統合インターフェースを介して、ユーザが、インデックス可能なウェブページに関連付けられたカスタマイズされたバックエンド機能を提供するユーザ編集可能コードをアクティブ化するためのプログラム可能なイベントを構成できるようにすることと、統合インターフェースを介して、プログラム可能なイベントに関連付けられたカスタマイズされたバックエンド機能を実装するためのユーザ編集可能コードに対するユーザの編集を受信することと、編集されたユーザ編集可能コードを、オンラインデータベースと通信するコード格納システムに格納することと、プログラム可能なイベントに関連付けられたトリガに応答して、カスタマイズされたバックエンド機能を実装するための編集されたユーザ編集可能コードを実行することと、を含み得る。
いくつかの実施形態では、本システムは、編集されたユーザ編集可能コードの実行を引き起こすフックに基づいて、カスタマイズされたバックエンド機能を実装するための編集されたユーザ編集可能コードの実行を含む。
さらに、いくつかの実施形態では、フックは、ウェブフック、データフック、またはデータバインディングルータフックである。
またさらに、いくつかの実施形態では、少なくとも1つのプロセッサが、オンラインデータベースに格納された規則に基づいて、ユーザにより選択されたウェブサイト構築要素に関連付けられたスケルトンコードを自動的に生成するように、またスケルトンコードを有効にするためにスケルトンコードをリモートウェブブラウザに送信するようにさらに構成される。
加えて、いくつかの実施形態では、本システムは、ユーザにより選択されたウェブサイト構築要素に関連付けられた機能と、自動生成されたスケルトンコードの一部としてその機能に関連付けられたコードのスニペットと、を含む。
さらに、いくつかの実施形態では、本システムは、リモートウェブブラウザにより表示可能な統合インターフェースを含み、リモートウェブブラウザは、フロントエンドウェブサイト編集ウィンドウとカスタマイズされたバックエンド編集ウィンドウとを含む。
さらに、いくつかの実施形態では、本システムは、カスタマイズされたバックエンド機能に関連付けられた特定のデータセットを含むデータアクティビティのためのトリガを含む。
またさらに、いくつかの実施形態では、本システムは、インデックス可能なウェブページ上で入力された更新のためのトリガを含む。
加えて、いくつかの実施形態では、本システムは、インデックス可能なウェブページ上のページ遷移のためのトリガを含む。
さらに、いくつかの実施形態では、本システムは、ユーザとインデックス可能なウェブページとの間の規定された対話のためのトリガを含む。
さらに、いくつかの実施形態では、少なくとも1つのプロセッサが、プログラム可能なイベントに関連付けられたトリガに応答して複数のカスタマイズされたバックエンド機能を実装するために、編集されたユーザ編集可能コードを実行するようにさらに構成される。
またさらに、いくつかの実施形態によれば、少なくとも1つのプロセッサが、複数のプログラム可能なイベントに関連付けられた複数のトリガに応答してカスタマイズされたバックエンド機能を実装するために、編集されたユーザ編集可能コードを実行するようにさらに構成される。
さらに、いくつかの実施形態によれば、本システムは、インデックス可能なウェブページに対する到来するクライアントの要求を処理するソフトウェアベースのルータのためのコードを格納するように構成されたコード格納システムを含む。
さらに、いくつかの実施形態では、本システムは、オンラインデータベースとコード格納システムとの両方である格納システムを含む。
特定の実施形態は、カスタマイズされたバックエンド機能を使用してウェブサイトを構築するためのコンピュータ実施方法に関する。本方法は、インデックス可能なウェブページのフロントエンドを構成するためのウェブサイト構築要素のライブラリを格納するように構成されたオンラインデータベースを維持するステップと、ユーザのリモートウェブブラウザに第1の命令を送信するステップであって、第1の命令は、ユーザが、リモートウェブブラウザにより表示可能な統合インターフェースを介して、格納されたライブラリにリモートでアクセスできるようにし、かつユーザが、インデックス可能なウェブページのフロントエンドを構築するための構築要素のうちの選択したものを利用できるようにし、統合インターフェースが、構築要素とインデックス可能なウェブページに関連付けられたカスタマイズされたバックエンド機能の両方へのアクセスをユーザに提供する、ステップと、リモートウェブブラウザにより表示可能な統合インターフェースを介して、インデックス可能なウェブページに関連付けられたカスタマイズされたバックエンド機能を提供するユーザ編集可能コードをアクティブ化するためのプログラム可能なイベントを構成するための仕様をユーザから受信するステップと、統合インターフェースを介して、プログラム可能なイベントに関連付けられたカスタマイズされたバックエンド機能を実装するためのユーザ編集可能コードに対するユーザの編集を受信するステップと、編集されたユーザ編集可能コードを、オンラインデータベースと通信するコード格納システムに格納するステップと、プログラム可能なイベントに関連付けられたトリガに応答して、カスタマイズされたバックエンド機能を実装するための編集されたユーザ編集可能コードを実行するス
テップと、を含み得る。
テップと、を含み得る。
さらに、いくつかの実施形態では、本方法は、トリガに応答してカスタマイズされたバックエンド機能を実装するための編集されたユーザ編集可能コードの実行において使用するために、オンラインデータベースの外部およびリモートウェブブラウザの外部のデータを取得するステップを含む。
さらに、いくつかの実施形態によれば、本方法は、コードの選択可能なセグメントの形で編集するために、ユーザ編集可能コードの少なくとも一部分へのアクセスをユーザに提供するステップを含む。
またさらに、いくつかの実施形態によれば、本方法は、編集されたユーザ編集可能コードの実行を引き起こすフックに基づいて、カスタマイズされたバックエンド機能を実装するための編集されたユーザ編集可能コードの実行を含む。
加えて、いくつかの実施形態によれば、本方法は、ウェブフック、またはデータフック、またはデータバインディングルータフックのいずれかであるフックを含む。
さらに、いくつかの実施形態によれば、本方法は、オンラインデータベースに格納された規則に基づく少なくとも1つのプロセッサによる、ユーザにより選択されたウェブサイト構築要素に関連付けられたスケルトンコードの生成と、スケルトンコードを有効にするための、スケルトンコードのリモートウェブブラウザへの送信と、を含む。
さらに、いくつかの実施形態によれば、自動的に生成されたスケルトンコードは、ユーザにより選択された構築要素に関連付けられた機能と、その機能に関連付けられたコードのスニペットと、を含む。
さらに、いくつかの実施形態では、本方法は、リモートウェブブラウザにより表示可能な統合インターフェースを提供するステップを含み、リモートウェブブラウザは、フロントエンドウェブサイト編集ウィンドウとカスタマイズされたバックエンド編集ウィンドウとを含む。
またさらに、いくつかの実施形態では、本方法は、カスタマイズされたバックエンド機能に関連付けられた特定のデータセットを含むデータアクティビティのためのトリガを含む。
加えて、いくつかの実施形態では、本方法は、インデックス可能なウェブページ上で入力された更新のためのトリガを含む。
さらに、いくつかの実施形態では、本方法は、ユーザとインデックス可能なウェブページとの間の規定された対話のためのトリガを含む。
特定の実施形態は、ウェブサイトサーバのためのウェブサーバ実行インスタンスのオンデマンド割り当てのためのシステムに関する。本システムは、複数のウェブサイトをホストするための汎用ウェブサイトサーバコードを格納する少なくとも第1の記憶場所と、第1の記憶場所から分離された方式で、複数のウェブサイトのそれぞれに一意のウェブサイト固有コードを格納する少なくとも第2の記憶場所と、を備え得る。本システムは、複数のウェブサーバ実行インスタンスを制御することであって、少なくともいくつかのインスタンスが複数のウェブサイトのうちの少なくとも1つに一意のウェブサイト固有コードを実行し、少なくとも他のウェブサーバ実行インスタンスが、どのウェブサイトにも特定の
一意のコードがない汎用ウェブサイトサーバコードを実行する、ことと、特定のウェブサイトにアクセスする要求を受信することであって、特定のウェブサイトが汎用ウェブサイトサーバコードを含むプラットフォーム上に構築されている、ことと、特定のウェブサイトが複数のウェブサーバ実行インスタンスのうちの1つにより既にホストされているか否かを判定することと、要求された特定のウェブサイトが複数のウェブサーバ実行インスタンスのうちの1つによってまだホストされていないと判定された場合に、汎用ウェブサイトサーバコードを実行する複数のウェブサーバ実行インスタンスのうちの第1のインスタンスに要求を差し向けることと、汎用ウェブサイトサーバコードを実行する複数のウェブサーバ実行インスタンスのうちの第1のインスタンスに、少なくとも1つの第2の記憶場所からの要求されたウェブサイトに一意の追加のウェブサイト固有コードを投入することと、汎用ウェブサイトサーバコードと要求されたウェブサイトに一意の投入されたウェブサイト固有コードとの両方の組み合わせにより、複数のウェブサーバ実行インスタンスのうちの第1のインスタンスを介して要求に応答することと、を含む動作を実行するように構成された少なくとも1つのプロセッサをさらに備え得る。
一意のコードがない汎用ウェブサイトサーバコードを実行する、ことと、特定のウェブサイトにアクセスする要求を受信することであって、特定のウェブサイトが汎用ウェブサイトサーバコードを含むプラットフォーム上に構築されている、ことと、特定のウェブサイトが複数のウェブサーバ実行インスタンスのうちの1つにより既にホストされているか否かを判定することと、要求された特定のウェブサイトが複数のウェブサーバ実行インスタンスのうちの1つによってまだホストされていないと判定された場合に、汎用ウェブサイトサーバコードを実行する複数のウェブサーバ実行インスタンスのうちの第1のインスタンスに要求を差し向けることと、汎用ウェブサイトサーバコードを実行する複数のウェブサーバ実行インスタンスのうちの第1のインスタンスに、少なくとも1つの第2の記憶場所からの要求されたウェブサイトに一意の追加のウェブサイト固有コードを投入することと、汎用ウェブサイトサーバコードと要求されたウェブサイトに一意の投入されたウェブサイト固有コードとの両方の組み合わせにより、複数のウェブサーバ実行インスタンスのうちの第1のインスタンスを介して要求に応答することと、を含む動作を実行するように構成された少なくとも1つのプロセッサをさらに備え得る。
いくつかの実施形態では、本システムは、複数のウェブサーバ実行インスタンスを含むことができ、複数のウェブサーバ実行インスタンスは、1つまたは複数のコンテナ、仮想マシン、または物理マシンプロセスを含み得る。
さらに、いくつかの実施形態では、要求はHTTP要求であり、本システムは、要求がタイムアウトする前に実行される、要求に応答する動作を含む。
またさらに、いくつかの実施形態では、本システムは、要求を受信してから100ミリ秒以内に実行される、要求に応答する動作を備える。
加えて、いくつかの実施形態では、本システムは、受信および判定する動作を含むHTTP要求を処理するためのプロキシサーバを含む。
さらに、いくつかの実施形態では、判定する動作は、特定のウェブサイトが複数のウェブサーバ実行インスタンスのうちの1つによって既にホストされているか否かに関してウェブサーバ実行インスタンスマネージャに問い合わせることをさらに含む。
さらに、いくつかの実施形態では、判定する動作は、ウェブサーバ実行インスタンスマネージャに要求を転送することと、要求が失敗した場合、それに応じて、要求された特定のウェブサイトが複数のウェブサーバ実行インスタンスのうちの1つによって現在ホストされていないと判定することと、をさらに含む。
またさらに、いくつかの実施形態では、判定する動作は、状態テーブルに基づいて、特定のウェブサイトが複数のウェブサーバ実行インスタンスのうちの1つによって既にホストされていることを判定することを含む。
加えて、いくつかの実施形態では、本システムは、プロキシサーバで維持される状態テーブルを含み、複数のウェブサーバ実行インスタンスのうちの1つにより既にホストされているウェブサイトのリストを識別する。
さらに、いくつかの実施形態では、本システムは、非アクティブなウェブサイトに関連付けられた要求の非アクティブの所定の期間に基づいてリストから非アクティブなウェブサイトを除去する状態テーブルを更新する動作を含む。
さらに、いくつかの実施形態では、要求されたウェブサイトに一意の追加のウェブサイ
ト固有コードが、要求されたウェブサイトに一意のバックエンドコードを含む。
ト固有コードが、要求されたウェブサイトに一意のバックエンドコードを含む。
またさらに、いくつかの実施形態では、要求されたウェブサイトに一意の追加のウェブサイト固有コードが、要求されたウェブサイトにより参照されるプラグインに関連付けられたコードを含む。
加えて、いくつかの実施形態では、動作は、特定のウェブサイトをまだホストしていない1セットのウェブサーバ実行インスタンスを監視することと、1セットのウェブサーバ実行インスタンスのサイズが閾値よりも小さい場合に、追加のウェブサーバ実行インスタンスをスピンアップするようにウェブサーバ実行インスタンスマネージャに命令することと、をさらに含む。
さらに、いくつかの実施形態では、動作は、特定のウェブサイトをまだホストしていない1セットのウェブサーバ実行インスタンスを監視することと、1セットのウェブサーバ実行インスタンスのサイズが閾値よりも大きい場合に、少なくとも1つのウェブサーバ実行インスタンスをシャットダウンするようにウェブサーバ実行インスタンスマネージャに命令することと、をさらに含む。
本開示の特定の実施形態は、ウェブサイトサーバのためのウェブサーバ実行インスタンスのオンデマンド割り当てのためのコンピュータ実施方法に関する。本方法は、複数のウェブサイトをホストするための汎用ウェブサイトサーバコードを第1の記憶場所に格納するステップと、複数のウェブサイトのそれぞれに一意のウェブサイト固有コードを、第1の記憶場所から分離された第2の記憶場所に格納するステップと、複数のウェブサーバ実行インスタンスを制御するステップであって、少なくともいくつかのインスタンスが複数のウェブサイトのうちの少なくとも1つに一意のウェブサイト固有コードを実行し、少なくとも他のウェブサーバ実行インスタンスが、どのウェブサイトにも特定の一意のコードがない汎用ウェブサイトサーバコードを実行する、ステップと、特定のウェブサイトにアクセスする要求を受信するステップであって、特定のウェブサイトが汎用ウェブサイトサーバコードを含むプラットフォーム上に構築されている、ステップと、特定のウェブサイトが複数のウェブサーバ実行インスタンスのうちの1つによって既にホストされているか否かを判定するステップと、要求された特定のウェブサイトが複数のウェブサーバ実行インスタンスのうちの1つによってまだホストされていないと判定された場合に、汎用ウェブサイトサーバコードを実行する複数のウェブサーバ実行インスタンスのうちの第1のインスタンスに要求を差し向けるステップと、汎用ウェブサイトサーバコードを実行する複数のウェブサーバ実行インスタンスのうちの第1のインスタンスに、少なくとも1つの第2の記憶場所からの要求されたウェブサイトに一意の追加のウェブサイト固有コードを投入するステップと、汎用ウェブサイトサーバコードと要求されたウェブサイトに一意の投入されたウェブサイト固有コードとの両方の組み合わせにより、複数のウェブサーバ実行インスタンスのうちの第1のインスタンスを介して要求に応答するステップと、を含み得る。
いくつかの実施形態によれば、複数のウェブサーバ実行インスタンスは、1つまたは複数のコンテナ、仮想マシン、または物理マシンプロセスを含み得る。
さらに、いくつかの実施形態によれば、要求はHTTP要求であり、本方法は、要求がタイムアウトする前に、要求に応答するステップを含む。
またさらに、いくつかの実施形態によれば、本方法は、要求を受信してから100ミリ秒以内に実行されている要求に応答するステップを含む。
本開示の特定の実施形態は、ウェブサイトサーバのためのウェブサーバ実行インスタンスのオンデマンド割り当てのためのシステムに関する。本システムは、複数のウェブサイトをホストするための汎用ウェブサイトサーバコードおよび複数のウェブサイトのそれぞれに一意のウェブサイト固有コードを格納する少なくとも1つのメモリデバイスと、動作を実行するように構成された少なくとも1つのプロセッサと、を備え得る。動作は、複数のウェブサーバ実行インスタンスを制御することであって、少なくともいくつかのインスタンスが複数のウェブサイトのうちの少なくとも1つに一意のウェブサイト固有コードを実行し、少なくとも他のウェブサーバ実行インスタンスが、どのウェブサイトにも特定の一意のコードがない汎用ウェブサイトサーバコードを実行する、ことと、特定のウェブサイトにアクセスする要求を受信することであって、特定のウェブサイトが汎用ウェブサイトサーバコードを含むプラットフォーム上に構築されている、ことと、特定のウェブサイトが複数のウェブサーバ実行インスタンスのうちの1つによって既にホストされているか否かを判定することと、要求された特定のウェブサイトが複数のウェブサーバ実行インスタンスのうちの1つによってまだホストされていないと判定された場合に、汎用ウェブサイトサーバコードを実行する複数のウェブサーバ実行インスタンスのうちの第1のインスタンスに要求を差し向けることであって、要求が、汎用ウェブサイトサーバコードを実行する複数のウェブサーバ実行インスタンスのうちの第1のインスタンスに対して、少なくとも1つのメモリデバイスからの要求されたウェブサイトに一意の追加のウェブサイト固有コードを取得するように促す、ことと、汎用ウェブサイトサーバコードと要求されたウェブサイトに一意の投入されたウェブサイト固有コードとの両方の組み合わせにより、複数のウェブサーバ実行インスタンスのうちの第1のインスタンスを介して要求に応答することと、を含み得る。
いくつかの実施形態によれば、汎用ウェブサイトサーバコードを実行する複数のウェブサーバ実行インスタンスのうちの第1のインスタンスが、要求に含まれる要求されたウェブサイトの識別子に少なくとも基づいて、少なくとも1つのメモリデバイスからの要求されたウェブサイトに一意の追加のウェブサイト固有コードを取得するように構成される。
特定の実施形態は、非公開ウェブサイトテスト環境でウェブサイトのテストデータを実行しながら、ウェブサイトデプロイ環境でウェブサイトのライブデータを同時に実行するためのシステムに関する。本システムは、ウェブサイトのライブデータおよびウェブサイトのテストデータの両方を格納する少なくとも1つの共通データベースであって、テストデータが少なくとも1つの共通データベースにおいてライブデータと関連付けられる、少なくとも1つの共通データベースと、動作を実行するように構成された少なくとも1つのプロセッサと、を備え得る。動作は、少なくとも1つの共通データベースに格納されたライブデータにアクセスすることと、ウェブサイトデプロイ環境でウェブサイトをレンダリングするために、アクセスしたライブデータを使用することと、ウェブサイトがウェブサイトデプロイ環境で稼働している間に、ウェブサイトでテストを実行する要求を受信することと、少なくとも1つの共通データベースにおいて、要求に応答して1セットのテストデータにアクセスすることであって、1セットのテストデータが、それぞれのライブデータ要素に対応する1つまたは複数のテストデータ要素を含み、1セットのテストデータが、ウェブサイトデプロイ環境においてアクセス可能ではない、ことと、ウェブサイトがウェブサイトデプロイ環境で動作している間に、非公開ウェブサイトテスト環境においてウェブサイトによりテストデータとライブデータとの両方のセットが同時に使用されるように、非公開ウェブサイトテスト環境においてウェブサイトを並行してテストすることと、を含む機能を実行し得る。
いくつかの実施形態によれば、テストデータは、テスト中に、特定のライブデータ要素を特定のテストデータ要素に置き換わらせるように構成されたマーカを使用してライブデータに関連付けられる。
さらに、いくつかの実施形態によれば、マーカはテスト後に削除されるように構成される。
加えて、いくつかの実施形態によれば、マーカは、テスト中に特定のライブデータを無視する命令を指示する。
さらに、いくつかの実施形態によれば、本システムは、複数のユーザによって生成された複数のウェブサイトをホストするためのウェブサイトホスティング環境である。
さらに、いくつかの実施形態によれば、少なくとも1つの共通データベースが、複数のユーザによって生成された複数のウェブサイトに関連付けられたライブデータを格納するように構成された集中オンラインデータベースである。
またさらに、いくつかの実施形態によれば、テストデータは、ウェブサイトのライブデータに以前に関連付けられていなかった新しく追加されたデータを含む。
加えて、いくつかの実施形態によれば、テストデータはウェブサイトデプロイ環境から隠蔽される。
さらに、いくつかの実施形態によれば、本システムは、非公開ウェブサイトテスト環境においてデータを追加する要求に応答してテストデータを含む。
さらに、いくつかの実施形態によれば、テストデータは、ウェブサイトデプロイ環境から隠蔽された少なくとも1つの共通データベースの領域に作成される。
またさらに、いくつかの実施形態によれば、本システムは、それぞれのライブデータ要素の複製に対して実行される要求された変更を指示するデータ要素を含むそれぞれのライブデータ要素に対応するテストデータ要素を含む。
加えて、いくつかの実施形態によれば、本システムは、変更されるように要求されたライブデータ要素のための対応するテストデータ要素の判定と、対応するそれぞれのテストデータ要素が存在する場合、対応するそれぞれのテストデータ要素に対する要求された変更の実行と、を含む。
さらに、いくつかの実施形態によれば、本システムは、非公開ウェブサイトテスト環境で開始されたクエリの受信と、1つまたは複数のライブデータ要素が対応するそれぞれのテストデータ要素に関連付けられていない場合、ライブデータ要素のうちの1つまたは複数によりクエリに応答することと、1つまたは複数のライブデータ要素が対応するそれぞれのテストデータ要素に関連付けられている場合、テストデータ要素のうちの1つまたは複数によりクエリに応答することと、を実行する。
さらに、いくつかの実施形態によれば、少なくとも1つのプロセッサは、テストデータをライブデータにマージし、それにより、ライブデータ要素のうちの1つまたは複数をそれぞれの対応するテストデータ要素で置き換えるようにさらに構成される。
本開示の特定の実施形態は、非公開ウェブサイトテスト環境でウェブサイトのテストデータを実行しながら、ウェブサイトデプロイ環境でウェブサイトのライブデータを同時に実行するためのコンピュータ実施方法に関する。本方法は、ウェブサイトのライブデータおよびウェブサイトのテストデータの両方を格納するステップであって、テストデータが
少なくとも1つの共通データベースにおいてライブデータに関連付けられる、ステップと、少なくとも1つの共通データベースに格納されたライブデータにアクセスするステップと、ウェブサイトデプロイ環境でウェブサイトをレンダリングするために、アクセスしたライブデータを使用するステップと、ウェブサイトがウェブサイトデプロイ環境で稼働している間に、ウェブサイトでテストを実行する要求を受信するステップと、少なくとも1つの共通データベースにおいて、要求に応答して1セットのテストデータにアクセスするステップであって、1セットのテストデータが、それぞれのライブデータ要素に対応する1つまたは複数のテストデータ要素を含み、1セットのテストデータが、ウェブサイトデプロイ環境においてアクセス可能ではない、ステップと、ウェブサイトがウェブサイトデプロイ環境で動作している間に、非公開ウェブサイトテスト環境においてウェブサイトによりテストデータとライブデータとの両方のセットが同時に使用されるように、非公開ウェブサイトテスト環境においてウェブサイトを並行してテストするステップと、を含み得る。
少なくとも1つの共通データベースにおいてライブデータに関連付けられる、ステップと、少なくとも1つの共通データベースに格納されたライブデータにアクセスするステップと、ウェブサイトデプロイ環境でウェブサイトをレンダリングするために、アクセスしたライブデータを使用するステップと、ウェブサイトがウェブサイトデプロイ環境で稼働している間に、ウェブサイトでテストを実行する要求を受信するステップと、少なくとも1つの共通データベースにおいて、要求に応答して1セットのテストデータにアクセスするステップであって、1セットのテストデータが、それぞれのライブデータ要素に対応する1つまたは複数のテストデータ要素を含み、1セットのテストデータが、ウェブサイトデプロイ環境においてアクセス可能ではない、ステップと、ウェブサイトがウェブサイトデプロイ環境で動作している間に、非公開ウェブサイトテスト環境においてウェブサイトによりテストデータとライブデータとの両方のセットが同時に使用されるように、非公開ウェブサイトテスト環境においてウェブサイトを並行してテストするステップと、を含み得る。
いくつかの実施形態によれば、本方法は、テスト中に、特定のライブデータ要素を特定のテストデータ要素に置き換わらせるように構成されたマーカを使用してライブデータにテストデータを関連付けるステップを含み得る。
さらに、いくつかの実施形態によれば、マーカはテスト後に削除されるように構成される。
またさらに、いくつかの実施形態によれば、マーカは、テスト中に特定の対応するライブデータを無視する命令を指示する。
加えて、いくつかの実施形態によれば、本方法は、複数のユーザによって生成された複数のウェブサイトをホストするためのウェブサイトホスティング環境を提供するように構成されたサーバによって実行される。
さらに、いくつかの実施形態によれば、テストデータは、ウェブサイトデプロイ環境から隠蔽された少なくとも1つの共通データベースの領域に作成される。
本開示の特定の実施形態は、デプロイ環境で視覚的アプリケーションシステムのライブデータを実行しながら、非公開テスト環境で視覚的アプリケーションシステムのテストデータを同時に実行するためのコンピュータベースのシステムに関し、コンピュータベースのシステムが、視覚的アプリケーションシステムのライブデータおよび視覚的アプリケーションシステムのテストデータの両方を格納する少なくとも1つの共通データベースであって、テストデータが少なくとも1つの共通データベースにおいてライブデータに関連付けられる、少なくとも1つの共通データベースと、少なくとも1つのプロセッサであって、少なくとも1つの共通データベースに格納された視覚的アプリケーションシステムのライブデータにアクセスし、デプロイ環境で視覚的アプリケーションシステムのアクセスしたライブデータを使用し、視覚的アプリケーションシステムがデプロイ環境で稼働している間に、視覚的アプリケーションシステムでテストを実行する要求を受信し、少なくとも1つの共通データベースにおいて、要求に応答して1セットのテストデータにアクセスし、1セットのテストデータがそれぞれのライブデータ要素に対応する1つまたは複数のテストデータ要素を含み、1セットのテストデータがデプロイ環境ではアクセス可能ではなく、視覚的アプリケーションシステムがデプロイ環境で稼働している間に、テストデータとライブデータとの両方のセットが非公開テスト環境において視覚的アプリケーションシステムにより同時に使用されるように、非公開テスト環境で視覚的アプリケーションシステムを並行してテストする、ように構成される、少なくとも1つのプロセッサと、を備える。
さらに、いくつかの実施形態によれば、コンピュータベースのシステムは、ウェブサイト開発システムおよびソースコード開発システムのうちの少なくとも1つである。
本開示の特定の実施形態は、少なくとも1つのプロセッサによって実行された場合に、ウェブサイトの複数のウェブページに投入されるデータセットを含むバックエンドデータベースを更新するための特定の命令を少なくとも1つのプロセッサに実行させる命令を含むコンピュータ可読媒体を含む。命令は、複数のデータ要素をユーザインターフェースを介して受信し、データ要素が少なくとも1つのデータ要素の1つまたは複数のグループに編成され、各グループがウェブサイトの個別のウェブページに表示するためのものであり、少なくとも1つのデータ要素のグループをデータベースに格納し、複数の仮想ウェブページを生成し、各仮想ウェブページが、対応する実際のウェブページが稼働する前における対応する実際のウェブページのプレビューであり、対応する実際のウェブページのそれぞれがデータベースを更新するための機能を備えて設計されておらず、複数の仮想ウェブページのうちの個別のページに少なくとも1つのデータ要素の各グループを表示し、ユーザが複数の仮想ウェブページからの仮想ウェブページを編集できるように編集ツールを表示し、仮想ウェブページに対する編集をデータベースのための更新に変換し、データベースに更新を格納し、仮想ウェブページに関連付けられた対応する実際のウェブページのライブビュー中に、プレビュー中に仮想ウェブページに対して更新を行った状態で対応する実際のウェブページを表示できるようにするための動作を実行し得る。
加えて、いくつかの実施形態では、複数の仮想ウェブページのそれぞれが、ユーザインターフェースのエディタインターフェースに関連付けられたフレーム内に表示可能である。
さらなる実施形態では、動作は、複数の仮想ウェブページのそれぞれを個別かつ動的に表示するために、ユーザが複数の仮想ウェブページにわたってナビゲートできるようにするユーザ選択可能機能の表示を含む。
追加の実施形態では、動作は、ユーザが複数の仮想ウェブページからの特定の仮想ウェブページを特定の仮想ウェブページの識別子に基づいて選択できるようにするユーザ選択可能機能の表示を含む。
さらなる実施形態では、特定の仮想ウェブページの識別子が、特定の仮想ウェブページに関連付けられたデータ要素に基づく。
さらに、いくつかの実施形態によれば、動作は、複数の仮想ウェブページのそれぞれに一意のURLを関連付けることを含む。
追加の実施形態では、複数の仮想ウェブページのそれぞれが、複数の仮想ウェブページのそれぞれの一意のURLを参照するサイトマップに基づいて生成される。
いくつかの実施形態によれば、編集ツールが、データベースに格納された少なくとも1つのデータ要素のグループに対する編集を受信するように構成される。
さらに、いくつかの実施形態では、編集ツールが、複数の仮想ウェブページの属性に対する編集を受信するように構成される。
追加の実施形態では、編集ツールが、複数の仮想ウェブページを生成するために使用されるコードに対する編集を受信するように構成される。
さらなる実施形態では、編集ツールが、複数の仮想ウェブページを生成するために使用される実際のコードを表すスケルトンコードの複数のセグメントを表示するように、また実際のコードに対する編集に変換されるスケルトンコードに対する編集を受信するように構成される。
さらに、いくつかの実施形態では、データ要素が、外部ソースからユーザインターフェースを介して受信される。
追加の実施形態では、動作は、複数の仮想ウェブページに関連付けられたソフトウェアベースのルータにアクセスすることと、受信したURLの1つまたは複数のセグメントに基づいて複数の仮想ウェブページのそれぞれの異なるバージョンを生成するように、ソフトウェアベースのルータを構成することと、をさらに含む。
いくつかの実施形態では、少なくとも1つのデータ要素の各グループのサブセットがリピータ機能により編成され、リピータ機能が少なくとも1つのデータ要素の各グループのサブセットの1つまたは複数の表示されたインスタンスを生成する。
さらに、追加の実施形態は、1つまたは複数のインスタンスを含む対応する実際のウェブページのライブビューを含む。
また本明細書では、ウェブサイトの複数のウェブページに投入されるデータセットを含むバックエンドデータベースを更新するためのコンピュータ実施方法も開示される。本方法は、ユーザインターフェースを介して複数のデータ要素を受信するステップであって、データ要素が少なくとも1つのデータ要素の1つまたは複数のグループに編成され、各グループがウェブサイトの個別のウェブページに表示するためのものである、ステップと、少なくとも1つのデータ要素のグループをデータベースに格納するステップと、複数の仮想ウェブページを生成するステップであって、各仮想ウェブページが、対応する実際のウェブページが稼働する前における対応する実際のウェブページのプレビューであり、対応する実際のウェブページのそれぞれがデータベースを更新するための機能を備えて設計されていない、ステップと、複数の仮想ウェブページのうちの個別のページに少なくとも1つのデータ要素の各グループを表示するステップと、ユーザが複数の仮想ウェブページからの仮想ウェブページを編集できるように編集ツールを表示するステップと、仮想ウェブページに対する編集をデータベースのための更新に変換するステップと、データベースに更新を格納するステップと、仮想ウェブページに関連付けられた対応する実際のウェブページのライブビュー中に、プレビュー中に仮想ウェブページに対して更新を行った状態で対応する実際のウェブページを表示できるようにするステップと、を含み得る。
いくつかの実施形態では、複数の仮想ウェブページのそれぞれが、ユーザインターフェースのエディタインターフェースに関連付けられたフレーム内に表示可能である。
さらに、いくつかの実施形態では、本方法は、複数の仮想ウェブページのそれぞれを個別かつ動的に表示するために、ユーザが複数の仮想ウェブページにわたってナビゲートできるようにするユーザ選択可能機能を表示するステップをさらに含む。
追加の実施形態では、本方法は、ユーザが複数の仮想ウェブページからの特定の仮想ウェブページを特定の仮想ウェブページの識別子に基づいて選択できるようにするユーザ選択可能機能を表示するステップをさらに含む。
さらなる実施形態では、特定の仮想ウェブページの識別子が、特定の仮想ウェブページ
に関連付けられたデータ要素に基づく。
に関連付けられたデータ要素に基づく。
さらに、いくつかの実施形態では、本方法は、複数の仮想ウェブページのそれぞれに一意のURLを関連付けるステップをさらに含む。
追加の実施形態では、複数の仮想ウェブページのそれぞれが、複数の仮想ウェブページのそれぞれの一意のURLを参照するサイトマップに基づいて生成される。
さらに、いくつかの実施形態では、編集ツールが、データベースに格納された少なくとも1つのデータ要素のグループに対する編集を受信するように構成される。
追加の実施形態によれば、編集ツールが、複数の仮想ウェブページの属性に対する編集を受信するように構成される。
さらなる実施形態では、編集ツールが、複数の仮想ウェブページを生成するために使用されるコードに対する編集を受信するように構成される。
またさらに、いくつかの実施形態では、編集ツールが、複数の仮想ウェブページを生成するために使用される実際のコードを表すスケルトンコードの複数のセグメントを表示するように、また実際のコードに対する編集に変換されるスケルトンコードに対する編集を受信するように構成される。
追加の実施形態では、データ要素が、外部ソースからユーザインターフェースを介して受信される。
追加の開示される実施形態は、ウェブページに投入されるデータセットを含むバックエンドデータベースを更新するためにウェブページを動的に編集できるようにするためのシステムに関する。本システムは、複数のウェブページに表示するための複数のデータ要素を格納するように構成されたオンラインデータベースであって、データ要素が少なくとも1つのデータ要素のうちの1つまたは複数のグループに編成され、各グループがウェブサイトの個別のウェブページに表示するためのものであり、各個別のウェブページがオンラインデータベースを更新するための機能を持たない、オンラインデータベースと、動作を実行するように構成された少なくとも1つのプロセッサと、を備え得る。動作は、少なくとも1つのデータ要素のグループに基づいて生成された第1のウェブページの編集可能なバージョンを表示するインターフェースを提供するための命令をブラウザにリモートで提供し、インターフェースによりユーザが少なくとも1つのデータ要素を編集でき、インターフェースを介して受信した、第1のウェブページの編集可能なバージョンに対する編集を、オンラインデータベースのための更新に変換し、オンラインデータベースに更新を格納し、第1のウェブページのライブビュー中に、第1のウェブページの編集可能なバージョンに対して更新を行った状態で第1のウェブページを表示できるようにし得る。
さらなる実施形態は、ウェブページの複数の個別の編集可能なバージョンを生成する動作を含み、ウェブページの個別の編集可能バージョンはそれぞれ、インターフェースのエディタインターフェースに関連付けられたフレーム内に表示可能である。
本開示の特定の実施形態は、オンラインエディタインターフェースを介して動的ウェブページをプレビューするためのシステムに関する。本システムは、複数のウェブページに表示するための複数のデータ要素を格納するように、またデータ要素を複数のグループに編成できるようにするための第1の命令を格納するように構成されたオンラインデータベースであって、複数のグループのそれぞれが、少なくとも1つのデータ要素を含み、かつ
少なくとも1つの個別のウェブページに関連付けられ、複数のグループのそれぞれがさらに、複数のスクロール可能な仮想ウェブページを構成するために、ブラウザによって実行可能なフロントエンドコードおよびブラウザからリモートのバックエンドサーバによって実行可能なバックエンドコードのうちの少なくとも1つによって利用可能である、オンラインデータベースと、少なくとも1つのプロセッサであって、ブラウザに関連付けられたユーザが、データベースにデータ要素を追加できるように、また追加された各データ要素を複数のグループのうちの少なくとも1つに関連付けできるように、またフロントエンドコードおよびバックエンドコードのうちの少なくとも1つを修正できるようにするためのインターフェースを表示するための第2の命令をブラウザにリモートで提供し、ユーザによる追加されたデータ要素、追加されたデータ要素と複数のグループのうちの少なくとも1つとの関連付け、ならびにフロントエンドコードおよびバックエンドコードのうちの少なくとも1つの修正に基づいて、複数のスクロール可能な仮想ウェブページを生成するための第3の命令を実行し、複数のスクロール可能な仮想ウェブページが、少なくとも1つのプロセッサによって独立して生成され、かつユーザによって独立して編集されるように構成され、対応する最終的なウェブページの生成前に複数のスクロール可能な仮想ウェブページを表示するように構成されたプレビューインターフェースを表示するための第4の命令をブラウザにリモートで提供し、プレビューインターフェースは、ユーザが、少なくとも1つのデータ要素の複数のグループのそれぞれに基づいて、複数のスクロール可能な仮想ウェブページにわたって選択的にスクロールすることができるように、また対応する最終ウェブページが稼働される前に、少なくとも1つのデータ要素のグループが対応する最終ウェブページにどのように表示されるかを視覚化することができるようにする、ように構成された少なくとも1つのプロセッサと、を備え得る。
少なくとも1つの個別のウェブページに関連付けられ、複数のグループのそれぞれがさらに、複数のスクロール可能な仮想ウェブページを構成するために、ブラウザによって実行可能なフロントエンドコードおよびブラウザからリモートのバックエンドサーバによって実行可能なバックエンドコードのうちの少なくとも1つによって利用可能である、オンラインデータベースと、少なくとも1つのプロセッサであって、ブラウザに関連付けられたユーザが、データベースにデータ要素を追加できるように、また追加された各データ要素を複数のグループのうちの少なくとも1つに関連付けできるように、またフロントエンドコードおよびバックエンドコードのうちの少なくとも1つを修正できるようにするためのインターフェースを表示するための第2の命令をブラウザにリモートで提供し、ユーザによる追加されたデータ要素、追加されたデータ要素と複数のグループのうちの少なくとも1つとの関連付け、ならびにフロントエンドコードおよびバックエンドコードのうちの少なくとも1つの修正に基づいて、複数のスクロール可能な仮想ウェブページを生成するための第3の命令を実行し、複数のスクロール可能な仮想ウェブページが、少なくとも1つのプロセッサによって独立して生成され、かつユーザによって独立して編集されるように構成され、対応する最終的なウェブページの生成前に複数のスクロール可能な仮想ウェブページを表示するように構成されたプレビューインターフェースを表示するための第4の命令をブラウザにリモートで提供し、プレビューインターフェースは、ユーザが、少なくとも1つのデータ要素の複数のグループのそれぞれに基づいて、複数のスクロール可能な仮想ウェブページにわたって選択的にスクロールすることができるように、また対応する最終ウェブページが稼働される前に、少なくとも1つのデータ要素のグループが対応する最終ウェブページにどのように表示されるかを視覚化することができるようにする、ように構成された少なくとも1つのプロセッサと、を備え得る。
いくつかの実施形態によれば、本システムは、対応する最終ウェブページのフロントエンドを構築するためのデータ要素のうちの1つに少なくとも1つのウェブサイト構築要素を関連付けるための少なくとも1つの構築要素のうちの選択したものを、ユーザがウェブページテンプレートにドラッグアンドドロップできるようにするために、オンラインエディタインターフェースを表示するための追加の命令をブラウザにリモートで提供し得る。
さらに、いくつかの実施形態によれば、本システムは、複数のグループのそれぞれに関連付けられた対応する最終ウェブページをレンダリングするための調整可能なデータコンポーネントを含むように構成された動的ウェブページテンプレートであるウェブページテンプレートを含む。
またさらに、いくつかの実施形態によれば、本システムは、オンラインエディタインターフェースに関連付けられたフレーム内でブラウザにおいて表示されるように構成されたプレビューインターフェースを含み得る。
加えて、いくつかの実施形態によれば、本システムは、オンラインエディタインターフェースに関連付けられたフレーム内に表示可能な複数のスクロール可能な仮想ウェブページを含み得る。
さらに、いくつかの実施形態によれば、本システムは、ユーザが複数のスクロール可能な仮想ウェブページにわたってスクロールできるようにするユーザ選択可能機能を含むことができるプレビューインターフェースを含み得る。
さらに、いくつかの実施形態によれば、本システムは、それぞれの仮想ウェブページの識別子に基づいて表示するために特定の仮想ウェブページをユーザが選択できるようにするユーザ選択可能機能を含むことができるプレビューインターフェースを含む。
またさらに、いくつかの実施形態によれば、本システムは、データベースに格納されたデータ要素に基づいてそれぞれの仮想ウェブページの識別子を含み得る。
加えて、いくつかの実施形態によれば、本システムは、複数のグループのそれぞれに一意のURLを関連付けることができる。
さらに、いくつかの実施形態によれば、本システムは、各ウェブページの一意のURLを参照するサイトマップに基づいて生成され得る複数のスクロール可能な仮想ウェブページを含む。
さらに、いくつかの実施形態によれば、本システムは、複数のリモートユーザの複数のユーザ生成ウェブサイトに関連付けられたデータを格納するように構成された集中オンラインデータベースを含み得るデータベースを含む。
またさらに、いくつかの実施形態によれば、少なくとも1つの個別のウェブページは、検索エンジンによりインデックス可能である。
加えて、いくつかの実施形態によれば、本システムは、ソフトウェアベースのルータの機能を実行するように構成されたフロントエンドコードおよびバックエンドコードのうちの少なくとも1つを含み得る。
さらに、いくつかの実施形態によれば、ソフトウェアベースのルータは、ユーザにより提供される複数の異なる可能なURLセグメントに基づいて複数の異なる仕方で少なくとも1つの個別のウェブページを構成することができる。
さらに、いくつかの実施形態によれば、本システムは、少なくとも1つの個別のウェブページに関連付けられたフロントエンドコードおよびバックエンドコードのうちの少なくとも1つを含み得る。
またさらに、本システムは、特定のソフトウェアベースのルータに関連付けられたフロントエンドコードおよびバックエンドコードのうちの少なくとも1つを含み得る。
加えて、複数のグループは、複数の別個のウェブページを含むウェブサイトおよびウェブサイトの関連するグループのうちの少なくとも1つに関連付けられ得る。
さらに、いくつかの実施形態によれば、本システムは、リピータ機能によって編成された複数のデータ要素のサブセットを含むことができ、リピータ機能は、複数のデータ要素のサブセットの1つまたは複数の表示インスタンスを生成する。
さらに、いくつかの実施形態によれば、1つまたは複数のインスタンスは、複数のスクロール可能な仮想ウェブページを表示するように構成されたプレビューインターフェースの一部であり得る。
本開示の特定の実施形態は、オンラインエディタインターフェースを介して動的ウェブページをプレビューするためのコンピュータ実施方法に関する。本方法は、複数のウェブページに表示するための複数のデータ要素を格納するステップと、データ要素を複数のグループに編成できるようにするための第1の命令を格納するステップであって、複数のグループのそれぞれが、少なくとも1つのデータ要素を含み、かつ少なくとも1つの個別のウェブページに関連付けられ、複数のグループのそれぞれがさらに、複数のスクロール可能な仮想ウェブページを構成するために、ブラウザによって実行可能なフロントエンドコ
ードおよびブラウザからリモートのバックエンドサーバによって実行可能なバックエンドコードのうちの少なくとも1つによって利用可能である、ステップと、ブラウザに関連付けられたユーザが、データベースにデータ要素を追加できるように、また追加された各データ要素を複数のグループのうちの少なくとも1つに関連付けできるように、またフロントエンドコードおよびバックエンドコードのうちの少なくとも1つを修正できるようにするためのインターフェースを表示するための第2の命令をブラウザにリモートで提供するステップと、ユーザによる追加されたデータ要素、追加されたデータ要素と複数のグループのうちの少なくとも1つとの関連付け、ならびにフロントエンドコードおよびバックエンドコードのうちの少なくとも1つの修正に基づいて、複数のスクロール可能な仮想ウェブページを生成するための第3の命令を実行するステップであって、複数のスクロール可能な仮想ウェブページが、少なくとも1つのプロセッサによって独立して生成され、かつユーザによって独立して編集されるように構成される、ステップと、対応する最終的なウェブページの生成前に複数のスクロール可能な仮想ウェブページを表示するように構成されたプレビューインターフェースを表示するための第4の命令をブラウザにリモートで提供するステップであって、プレビューインターフェースは、ユーザが、少なくとも1つのデータ要素の複数のグループのそれぞれに基づいて、複数のスクロール可能な仮想ウェブページにわたって選択的にスクロールすることができるように、また対応する最終ウェブページが稼働される前に、少なくとも1つのデータ要素のグループが対応する最終ウェブページにどのように表示されるかを視覚化することができるようにする、ステップと、を含み得る。
ードおよびブラウザからリモートのバックエンドサーバによって実行可能なバックエンドコードのうちの少なくとも1つによって利用可能である、ステップと、ブラウザに関連付けられたユーザが、データベースにデータ要素を追加できるように、また追加された各データ要素を複数のグループのうちの少なくとも1つに関連付けできるように、またフロントエンドコードおよびバックエンドコードのうちの少なくとも1つを修正できるようにするためのインターフェースを表示するための第2の命令をブラウザにリモートで提供するステップと、ユーザによる追加されたデータ要素、追加されたデータ要素と複数のグループのうちの少なくとも1つとの関連付け、ならびにフロントエンドコードおよびバックエンドコードのうちの少なくとも1つの修正に基づいて、複数のスクロール可能な仮想ウェブページを生成するための第3の命令を実行するステップであって、複数のスクロール可能な仮想ウェブページが、少なくとも1つのプロセッサによって独立して生成され、かつユーザによって独立して編集されるように構成される、ステップと、対応する最終的なウェブページの生成前に複数のスクロール可能な仮想ウェブページを表示するように構成されたプレビューインターフェースを表示するための第4の命令をブラウザにリモートで提供するステップであって、プレビューインターフェースは、ユーザが、少なくとも1つのデータ要素の複数のグループのそれぞれに基づいて、複数のスクロール可能な仮想ウェブページにわたって選択的にスクロールすることができるように、また対応する最終ウェブページが稼働される前に、少なくとも1つのデータ要素のグループが対応する最終ウェブページにどのように表示されるかを視覚化することができるようにする、ステップと、を含み得る。
いくつかの実施形態によれば、本方法は、ウェブページのフロントエンドを構築するためのデータ要素のうちの1つに少なくとも1つのウェブサイト構築要素を関連付けるための少なくとも1つの構築要素のうちの選択したものを、ユーザがウェブページテンプレートにドラッグアンドドロップできるようにするために、オンラインエディタインターフェースを表示するための追加の命令をブラウザにリモートで提供するステップを含む。
さらに、いくつかの実施形態によれば、ウェブページテンプレートが、複数のグループのそれぞれに関連付けられた対応する最終ウェブページをレンダリングするための調整可能なデータコンポーネントを含むように構成された動的ウェブページテンプレートである。
またさらに、いくつかの実施形態によれば、プレビューインターフェースが、オンラインエディタインターフェースに関連付けられたフレーム内でブラウザにおいて表示されるように構成される。
本開示の特定の実施形態は、動的ウェブページ間をナビゲートするためのシステムに関し、本システムは、複数の動的ウェブページ上に表示するための複数のデータ要素を格納するオンラインデータベースを備える。データベースはまた、データ要素を複数のグループに編成できるようにするための第1の命令を格納することができ、複数のグループのそれぞれが、少なくとも1つのデータ要素を含み、かつ複数の動的ウェブページのうちの少なくとも1つに関連付けられ、さらに複数のグループのそれぞれが、複数の動的ウェブページを構成するために、ブラウザにより実行可能なフロントエンドコードおよびブラウザからリモートのバックエンドサーバにより実行可能なバックエンドコードのうちの少なくとも1つによって利用可能であり、複数の動的ウェブページのそれぞれが、独立して生成され、かつ独立して編集されるように構成される。本システムはまた、複数の動的ウェブページのうちの少なくとも1つの一部としてナビゲーションインターフェースを表示するための第2の命令をブラウザにリモートで提供するように構成された少なくとも1つのプロセッサを備えることができ、ナビゲーションインターフェースが、少なくとも1つのデータ要素の複数のグループのそれぞれに基づいて自動的に生成された複数の動的ウェブペ
ージのそれぞれにわたって、ユーザが選択的にナビゲートできるように構成され、ナビゲーションインターフェースが複数の動的ウェブページのネイティブ要素ではない。
ージのそれぞれにわたって、ユーザが選択的にナビゲートできるように構成され、ナビゲーションインターフェースが複数の動的ウェブページのネイティブ要素ではない。
さらに、いくつかの実施形態によれば、本システムは、表示された機能を介して動的ウェブページを選択することによりナビゲートすることであり得る複数の動的ウェブページを検索することと、複数のウェブページを順次スクロールすることと、次、前、最初、最後、ブックマークされた、または他の特定のウェブページに直接移動することと、のうちの少なくとも1つを実行し得る。
またさらに、いくつかの実施形態によれば、動的ウェブページは、サイトマップに基づいて判定された順序を有する。
加えて、いくつかの実施形態によれば、本システムは、複数の動的ウェブページの他の態様から分離されたフレーム内でブラウザに表示されるように構成されたナビゲーションインターフェースを含み得る。
本開示の特定の実施形態は、サーバ環境で実施されるウェブサイトをホストするためのシステムに関する。本システムは、複数のユーザにより生成された複数のウェブサイトを共同ホストするように構成された少なくとも1つのホスティングサーバであって、ホスティングサーバが、複数のユーザのそれぞれが複数のユーザのそれぞれにより生成された特定のウェブサイトを選択的に変更できるようにするために、複数のユーザがアクセスできるホストされた共通編集ツールを含み、ホスティングサーバがさらに、複数のユーザのうちの少なくとも一部が、複数のユーザのうちの他のユーザにより生成された共同ホストされる特定のウェブサイトを変更するのを防ぐように構成される、少なくとも1つのホスティングサーバと、複数のユーザのうちの少なくとも1つのサブセットが、複数のユーザのうちの少なくとも1つのサブセットにより生成された共同ホストされた特定のウェブサイトのためのプラグインに関連付けられたプラグインコードをホスティングサーバにアップロードできるようにするための、複数のユーザのうちの少なくとも1つのサブセットによる表示のためのインターフェースを生成するように構成された少なくとも1つのプロセッサであって、少なくとも1つの特定のプラグインのプラグインコードが、クライアントにより実行可能なフロントエンドプラグイン機能コードまたはプラグインサーバで実行可能なバックエンドプラグイン機能コードのうちの少なくとも1つを含む、少なくとも1つのプロセッサと、ユーザがアップロードした格納されたプラグインコードが、複数のユーザにより生成された共同ホストされた特定のウェブサイトと共に共通ドメインで集中的にホストされるように、少なくとも1つの特定のプラグインに関連付けられた、ユーザがアップロードしたプラグインコードを格納するためのメモリであって、少なくとも1つの特定のプラグインの単一インスタンスが、複数の共同ホストされた特定のウェブサイトにより共有される、メモリと、を備えることができ、少なくとも1つのアップロードされたプラグインを共有する複数の共同ホストされた特定のウェブサイトのそれぞれについて、少なくとも1つのプロセッサが、分離メカニズムを使用して、クライアントにおけるフロントエンドプラグイン機能コードの実行またはプラグインサーバにおけるバックエンドプラグイン機能コードの実行のうちの少なくとも1つを安全に可能にするようにさらに構成され、分離メカニズムに基づいて、少なくとも1つのアップロードされたプラグインに含まれる悪意のあるコードが、ホスティングサーバ上で複数の共同ホストされた特定のウェブサイトの他のサイトに影響を及ぼすことを防ぐ。
いくつかの実施形態によれば、本システムに含まれるプラグインサーバとホスティングサーバとは同じサーバである。
さらに、いくつかの実施形態によれば、本システムは、ホスティングサーバとは別個の
プラグインサーバにおけるバックエンドプラグイン機能コードの実行を可能にする分離メカニズムを含み得る。
プラグインサーバにおけるバックエンドプラグイン機能コードの実行を可能にする分離メカニズムを含み得る。
またさらに、いくつかの実施形態によれば、本システムは、仮想マシンにおけるバックエンドプラグイン機能コードの実行を可能にする分離メカニズムを含み得る。
加えて、いくつかの実施形態によれば、本システムは、ドッカーコンテナにおけるバックエンドプラグイン機能コードの実行を可能にする分離メカニズムを含み得る。
さらに、いくつかの実施形態によれば、本システムは、プラグインサーバにおいて分離されたプロセスを介してバックエンドプラグイン機能コードの実行を含む分離メカニズムを含み得る。
さらに、いくつかの実施形態によれば、本システム本システムは、共同ホストされた特定のウェブサイトの安全なサブ領域におけるフロントエンドプラグイン機能コードの実行を可能にする分離メカニズムを含み得る。
またさらに、いくつかの実施形態によれば、本システムは、共同ホストされた特定のウェブサイトのサブ領域と共同ホストされた特定のウェブサイトの他のサブ領域との間の通信を制御するための安全な通信チャネルを確立し得る。
加えて、いくつかの実施形態によれば、本システムは、共同ホストされた特定のウェブサイトの他の態様に対する少なくとも1つのアップロードされたプラグインのアクセスを制限するために構成される安全な通信チャネルを含み得る。
さらに、いくつかの実施形態によれば、本システムは、少なくとも1つのアップロードされたプラグインと共同ホストされた特定のウェブサイトとのやり取りを制限するように構成可能なアプリケーションプログラミングインターフェースを使用して作成される安全な通信チャネルを含み得る。
さらに、いくつかの実施形態によれば、本システムは、クライアントのブラウザにおいてiframeを介してフロントエンドプラグイン機能コードの実行を可能にする分離メカニズムを含むことができ、iframeはフロントエンドプラグイン機能コードの実行のための安全なサンドボックスとして機能するように構成される。
またさらに、いくつかの実施形態によれば、本システムは、クライアントにより実行可能なフロントエンドプラグイン機能コードを、共同ホストされた特定のウェブサイトの別個のウェブページサブ領域に関連付けることができる。
加えて、いくつかの実施形態によれば、本システムは、2つ以上の信頼できるプラグインを共同ホストされた特定のウェブサイトに関連付けることができる。
さらに、いくつかの実施形態によれば、本システムは、少なくとも1つのアップロードされたプラグインが、フロントエンドプラグイン機能コードが実行される共同ホストされた特定のウェブページの少なくとも1つのコンポーネントと通信および制御できるようにすることができる。
さらに、いくつかの実施形態によれば、本システムは、複数のユーザがアクセス可能な共有プラットフォーム上で複数の共同ホストされた特定のウェブサイトを共同ホストし得る。
またさらに、いくつかの実施形態によれば、本システムは、共同ホストされた特定のウェブサイトのウェブページに関連付けられたクッキーから分離された少なくとも1つのアップロードされたプラグインを含み得る。
本開示の特定の実施形態は、サーバ環境に実装されたウェブサイトをホストするためのコンピュータ実施方法に関する。本方法は、ホスティングサーバ上で、複数のユーザにより生成された複数のウェブサイトを共同ホストするステップと、複数のユーザのそれぞれが複数のユーザのそれぞれにより生成された特定のウェブサイトを選択的に変更できるようにするために、共通編集ツールを複数のユーザが利用できるようにするステップと、複数のユーザのうちの少なくとも一部が、複数のユーザのうちの他のユーザにより生成された共同ホストされる特定のウェブサイトを変更することを防止するステップと、複数のユーザのうちの少なくとも1つのサブセットが、複数のユーザのうちの少なくとも1つのサブセットにより生成された共同ホストされた特定のウェブサイトのためのプラグインに関連付けられたプラグインコードをホスティングサーバにアップロードできるようにするための、複数のユーザのうちの少なくとも1つのサブセットによる表示のためのインターフェースを生成するステップであって、少なくとも1つの特定のプラグインのプラグインコードが、クライアントにより実行可能なフロントエンドプラグイン機能コードまたはプラグインサーバで実行可能なバックエンドプラグイン機能コードの少なくとも1つを含む、ステップと、ユーザがアップロードした格納されたプラグインコードが、複数のユーザにより生成された共同ホストされた特定のウェブサイトと共に共通ドメインで集中的にホストされるように、少なくとも1つの特定のプラグインに関連付けられた、ユーザがアップロードしたプラグインコードを格納するステップであって、少なくとも1つの特定のプラグインの単一インスタンスが、複数の共同ホストされた特定のウェブサイトにより共有される、ステップと、少なくとも1つのアップロードされたプラグインを共有する複数の共同ホストされた特定のウェブサイトのそれぞれについて、分離メカニズムを使用して、クライアントにおけるフロントエンドプラグイン機能コードの実行またはプラグインサーバにおけるバックエンドプラグイン機能コードの実行のうちの少なくとも1つを安全に可能にするステップであって、分離メカニズムに基づいて、少なくとも1つのアップロードされたプラグインに含まれる悪意のあるコードが、ホスティングサーバ上で複数の共同ホストされた特定のウェブサイトの他のサイトに影響を及ぼすことを防ぐ、ステップと、を含み得る。
いくつかの実施形態によれば、本方法は、共同ホストされた特定のウェブサイトのウェブページに関連付けられたクッキーから分離された少なくとも1つのアップロードされたプラグインを含み得る。
さらに、いくつかの実施形態によれば、プラグインサーバとホスティングサーバとは同じサーバである。
またさらに、いくつかの実施形態によれば、本方法は、ホスティングサーバとは別個のプラグインサーバにおけるバックエンドプラグイン機能コードの実行を可能にする分離メカニズムを含み得る。
加えて、いくつかの実施形態によれば、本方法は、仮想マシンにおけるバックエンドプラグイン機能コードの実行を可能にする分離メカニズムを含み得る。
さらに、いくつかの実施形態によれば、本方法は、ドッカーコンテナにおけるバックエンドプラグイン機能コードの実行を可能にする分離メカニズムを含み得る。
さらに、いくつかの実施形態によれば、本方法は、プラグインサーバにおいて分離されたプロセスを介してバックエンドプラグイン機能コードの実行を可能にする分離メカニズムを含み得る。
またさらに、いくつかの実施形態によれば、本方法は、クライアントにより実行可能なフロントエンドプラグイン機能コードを含むことができ、フロントエンドプラグイン機能コードがブラウザのiframeにユーザインターフェースを生成するように構成される。
上記の一般的な説明および以下の詳細な説明は、例示および説明のためのものに過ぎず、特許請求の範囲に記載される本発明を限定するものではないことを理解されたい。
本明細書に組み込まれ、本明細書の一部を構成する添付の図面は、いくつかの実施形態を例示し、説明と併せて、本開示の原理を説明する働きをする。
以下の詳細な説明では、本開示の例示的な実施形態が十分に理解されるように多くの具体的な細部が説明されている。しかしながら、具体的な細部のすべてがなくとも例示的な実施形態の原理を実践できることを当業者であれば理解するはずである。例示的な実施形態の原理を不明瞭にしないために、周知の方法、手順、およびコンポーネントについては詳細には説明されていない。明示的に述べられていない限り、本明細書で説明される例示的な方法およびプロセスは、特定の順序またはシーケンスにも特定のシステム構成にも制約されない。加えて、記載された実施形態またはその要素のいくつかは、同時に、同じ時点で、または並行して発生または実行され得る。ここで、本開示の実施形態について詳細に述べ、その例を添付の図面に示す。明示的に述べられていない限り、本明細書で使用される送信および受信は、特定の要求に応答しての送信もしくは受信、またはそのような特定の要求なしでの送信もしくは受信を含む広い意味を持つと理解されたい。よって、これらの用語は、送信および受信の能動的な形式と受動的な形式との両方を包含している。
本開示と整合するシステムおよび方法は、カスタマイズされたフロントエンドおよびバックエンド機能を含むウェブサイト構築システムを対象とする。いくつかの実施形態では、ウェブサイト構築システムは、バックエンド機能開発能力のユーザ構成のためのオプションを含み得る。
図1は、本開示のいくつかの実施形態による、ネットワークを介して他のコンポーネントおよびユーザと対話する例示的なシステムを示している。図1に示すように、ウェブサイト構築システム(WBS)100は、ウェブサイトを作成および編集するためのツールであり得るWBSエディタ110を含む。WBS100はまた、WBSコンテンツ管理システム(CMS)120を含むことができ、WBS CMS120は、ウィジェットおよびウェブサイト、データベース、または類似のデータ格納構造で使用される他のツールと、構築されたウェブサイトまたは開発中のウェブサイトを表すコードまたはデータと、構築されたウェブサイトまたは開発中のウェブサイトを使用して作成、更新、および閲覧されるデータ(例えば、eコマースウェブサイトの基礎となっているeショップの在庫など
)と、のリポジトリであり得る。
)と、のリポジトリであり得る。
WBSエディタ110は、ウェブサイトを構築および編集するためのエディタであり得る。エディタにより、空白のキャンバスから開始して、またはWBS CMS120に格納され得る(テンプレートとも総称される)事前に開発されたサイト、サイトセクション、もしくはページに基づいて、ウェブサイトおよびウェブサイトページを構築することができる。WBSエディタ110は、構築中のウェブサイトのページの視覚的レイアウトおよび他の属性を定義することができる。テンプレートは、構築中のウェブサイトに属するウェブページとその初期コンテンツを定義することができる。WBSエディタ110はまた、様々なページ間のナビゲーションを定義することによりサイトの構成を決定するためのUIセクションも含み得る。WBSエディタ110は、ユーザが実際のウェブページで表示させたいようにウェブページにコンポーネントを配置できるようにすることにより、ページのレイアウトを定義する。
いくつかの実施形態では、以下でさらに説明するように、WBS100は、仮想マシン、コンテナインスタンス、またはサーバレスコードを介してウェブサイトおよび個々のページをホストすることができる。これらの技法により、ロード時間が短縮され、ユーザの待ち時間が短縮され得る。例えば、ウェブサイトに、実行しなければならないバックエンドまたはフロントエンドコードが組み込まれているか、サイト固有のコンポーネントが含まれている場合、そのようなコードおよびコンポーネントは、ステートレスサーバ実行インスタンスが所与のサイトに関してブラウザ(例えば、ウェブブラウザ131)によりなされた要求に最初に関連付けられたときに、ステートレスサーバ実行インスタンスにロードされ得る。次いで、このようなステートレスサーバインスタンスは、同じサイトに関与するさらなるブラウザ要求に再利用され得る。さらに、WBS100が処理される実際の要求に基づいてサーバリソースを使用できるという利点を提供し、このことは、専用のウェブサービス実行インスタンス(サーバ、VM、またはコンテナなど)およびインフラストラクチャを使用するよりもはるかに効率的である。
構築ツール121は、WBSエディタにより編集されているページ上にレイアウトされたコンポーネントであるウィジェットを含むことができる。いくつかの実施形態では、ウィジェットは、ウェブページを構築するユーザ、他のユーザ、WBSベンダ自体、またはサードパーティのアプリケーションプロバイダによって開発されたアプリを含み得る。アプリは、WIX APP MARKETなどのリポジトリから取得されてもよい。ウィジェットの例としては、単純なウィジェット(テキストフィールド、図形など)または複雑なウィジェット(カレンダー、フォームジェネレータ、画像編集、ビデオ編集、訪問者カウント、ソーシャルメディアの組み込みなど)が挙げられる。
WBS CMS120は、ウェブサイトを構築するためのコンポーネントと構築されたウェブサイトとの両方を格納することができる。いくつかの実施形態では、コンポーネントおよびウェブサイトは別個のCMSシステムで維持される。図1に示すように、構築ツール121は、ウィジェットとウェブサイトの容易な構築を支援する他のツールとを含むWBS CMS120に格納される。
構築ツール121は、ウェブサイトを構築し、ウェブサイトにコンテンツを含めるプロセスを容易にするウェブサイトの構築ブロックである。構築ツール121は、タブ、検索バー、ボタン、ギャラリー、スライドデッキなどの上述のようなコンポーネントツールまたはウィジェットと、アライメントツールなどの操作ツールとの両方を含むことができる。構築ツール121は、単純なウィジェット(例えば、ボタン、テキストフィールドなど)と複雑なウィジェット(例えば、ギャラリー、カレンダーウィジェットなど)との両方を含むことができ、高度な機能を実行するように構成される。構築ツール121は、ウィ
ジェットおよび他のツールを表すコードの抽象化として表すことができる。構築ツール121は、システムのすべてのユーザに提供されるパブリックデフォルトツールと、特定のウェブサイトまたはユーザにのみ提供されるプライベートツールと、を含み得る。プライベートツールは、ユーザまたはウェブサイトのためにカスタマイズされたパブリックツールまたは新しいツールを含み得る。プライベートツールは、ウェブサイトを構築するシステムのユーザまたはサードパーティベンダによって作成されてもよい。構築ツール121は、異なるユーザグループが構築し、異なるユーザグループが所有する複数のウェブサイト間で共有されてもよい。構築ツール121はまた、既存の構築ツール121のコードを編集することによりカスタマイズされ得る(例えば、ボタンのスタイルシートを更新して、新しいボタンの新しいスタイルシートを作成する)。カスタム構築ツールは、元の構築ツール121と共にシステムエリアデータベース122に格納され得る。
ジェットおよび他のツールを表すコードの抽象化として表すことができる。構築ツール121は、システムのすべてのユーザに提供されるパブリックデフォルトツールと、特定のウェブサイトまたはユーザにのみ提供されるプライベートツールと、を含み得る。プライベートツールは、ユーザまたはウェブサイトのためにカスタマイズされたパブリックツールまたは新しいツールを含み得る。プライベートツールは、ウェブサイトを構築するシステムのユーザまたはサードパーティベンダによって作成されてもよい。構築ツール121は、異なるユーザグループが構築し、異なるユーザグループが所有する複数のウェブサイト間で共有されてもよい。構築ツール121はまた、既存の構築ツール121のコードを編集することによりカスタマイズされ得る(例えば、ボタンのスタイルシートを更新して、新しいボタンの新しいスタイルシートを作成する)。カスタム構築ツールは、元の構築ツール121と共にシステムエリアデータベース122に格納され得る。
WBSエディタ110は、WBS CMS120のシステムエリアデータベース122に格納された構築ツール121へのリモートアクセスを提供する。構築ツール121の選択されたウィジェットのインスタンスは、ユーザがWBSエディタ110により編集中のページにウィジェットを配置すると作成され得る。構築ツール121から選択されたウィジェットのインスタンスは、ページ内のウィジェットへの参照により作成され得る。構築ツール121から選択されたウィジェットのインスタンスはまた、選択されたウィジェットを表すコードを構築中のウェブサイトのウェブページにコピーすることにより作成され得る。
WBSエディタ110は、通常サーバでホストされるソフトウェアであり、その要素の一部または全部が、実行のためにユーザのウェブサイト閲覧デバイス130(またはそのウェブブラウザ131)にロードされ得る。いくつかの実施形態では、WBSエディタ110は、システムエリアデータベース122を構築ツール121と共有してもよいし、共通サーバを共有してもよい。それにもかかわらず、他の実施形態では、WBSエディタ110およびシステムエリアデータベース122は別々にホストされる。
サイトエリアデータベース124は、WBSエディタ110を使用して構築されたウェブサイトを格納する。図示のように、ウェブサイト123は、WBSエディタ110を使用して構築され、サイトエリアデータベース124に格納されているウェブサイトである。サイトエリアデータベース124に格納されているウェブサイト123は、ウェブサイト開発デバイス140を使用してアクセス、更新、表示され得るコードおよびデータを表すテキストを含み得る。ウェブサイト123は、インデックス可能なウェブページ125を含む1つまたは複数のウェブページを含み得る。いくつかの実施形態では、例えば、1つまたは複数のインデックス可能なウェブページ125はすべて、同じ共通ドメイン(例えば、http://www.my-site.com)、サブドメイン(例えば、http://my-site.wix.com/)、またはURLプレフィックス(例えば、http://www.wix.com/wixsites/my-site/)を共有する。インデックス可能なウェブページ125は、フロントエンド126とバックエンド127とを含み得る。インデックス可能なウェブページ125は、破線で示すように、フロントエンド126およびバックエンド127を含むまたは参照する特別なファイルまたはコードを含んでもよいし、フロントエンド126およびバックエンド127のコレクションの単なる名前であってもよい。フロントエンド126は、インスタンス固有の情報(位置、サイズ、属性値など)を含む、構築ツール121のインスタンスであり得るウィジェットおよび他のUI要素から構成されてもよく、そのようなインスタンス固有の情報はまた、包含情報(すなわち、どのコンポーネントがどのコンテナ内に含まれているか)を含むこともできる。フロントエンド126はまた、(ランタイム中にウィジェットに影響を与える可能性がある)フロントエンド126で実行されるコードセグメントなどのコード要素を含むこともできる。フロントエンド126は、ページメタデータ、タイトルな
どの他の要素からさらに構成されてもよい。
どの他の要素からさらに構成されてもよい。
フロントエンド126は、ユーザに常に表示されるインスタンス、デフォルトで表示されるインスタンス、または少なくとも一部の時間に表示されるインスタンスなど、WBSエディタ110を使用して構築されたウェブサイト123のインデックス可能なウェブページ125に配置された構築ツール121のインスタンスを含む。バックエンド127は、ユーザがフロントエンド126と対話するとき、またはウェブサイト123に到来する通信、時間ベースのトリガ、もしくはウェブサイト123に接続されたデータベースへの変更などの非対話イベントを通じて、アクティブ化され得る機能を表す。バックエンド127は、ウェブサイト開発デバイス140およびWBSベンダスタッフデバイス150のユーザには、時々しか見られなくても、決して見られなくてもよい。フロントエンド126およびバックエンド127は、コードまたは構造化データ(例えば、XML、JSON、JSON-LDなど)としてサイトエリアデータベース124に格納されてもよい。コードは、テキスト形式またはコンパイル済みオブジェクトコードのいずれかで格納され得る。フロントエンド126およびバックエンド127を表すコードは、同じプログラミング言語または構造化データ形式であってもよい。いくつかの実施形態では、バックエンド127を表すコードおよびFE126の一部であるコードが、サイトエリアデータベース124に保存される前に異なるプログラミング言語に変換される。
いくつかの実施形態では、ウェブサイト123のコードおよびデータはデータベースを共有する場合もあれば、別個のデータベースを有する場合もある。いくつかの実施形態では、フロントエンド126およびバックエンド127を表すコードは、データベーステーブルのプレーンテキストとしてサイトエリアデータベース124に格納されてもよい。他の実施形態では、コードはファイルオブジェクトとして格納されてもよく、サイトエリアデータベース124にファイルの場所を格納してもよい。いくつかの実施形態では、コードは、サイトエリアデータベース124またはファイルの列の単一の場所に格納される。いくつかの実施形態では、コードは複数のファイルに分割されてもよい。
いくつかの実施形態では、インデックス可能なウェブページ125は動的ウェブページであり、フロントエンド126はテンプレートであり、実際のウェブページではなくてもよい。以下でさらに説明するように、動的ウェブページは、カスタマイズされたバックエンド機能に基づいて外観またはコンテンツを変更するように構成されたウェブページであり得る。以下でさらに説明するカスタマイズされたバックエンド機能の例としては、ウェブページに表示されるデータの更新、ウェブページ上の画像のサイズ変更または変更、ウェブページ上でのビデオコンテンツのレンダリングのトリガなどが挙げられる。いくつかの実施形態では、動的ウェブページのフロントエンド126は、様々な動的ウェブページのコンテンツおよび外観を更新するためにデータベーステーブルからのデータに直接バインドされたテンプレートであり得る。
いくつかの実施形態では、WBS100は、図1に示すコンポーネントをより多くまたはより少なく含むことができる。例えば、データベース122および124は、単一のデータベースであっても別個のデータベースであってもよい。データベースは、分散された1セットのデータベースであってもよい。データベース122および124の両方は、リレーショナルデータベース、オブジェクト指向データベース、データ言語ファイルリポジトリ(XMLまたはJSONなどの言語用)またはNoSQLデータベースとすることができる。さらに、データベース122および124は、オンプレミスネットワーク(例えば、インターネットにアクセスできるローカルエリアネットワーク)、クラウドベースのネットワーク(例えば、パブリックまたはプライベートクラウドアーキテクチャ)、またはオンプレミスおよびクラウドベースのネットワークのハイブリッドにおいて維持されてもよい。
図1に示すように、WBS CMS120のサイトエリアデータベース124に格納されたウェブサイト123は、ウェブブラウザ131を介してウェブサイト閲覧デバイス130(例えば、デスクトップコンピュータ、タブレット、ラップトップ、スマートフォンなど)によりアクセスされ得る。ウェブサイト閲覧デバイス130のユーザ(図示せず)は、ネットワーク160(例えば、ウェブサイト閲覧デバイス130とWBS100との間の中間ネットワークを含むインターネット)を介してウェブサイト123へのアクセスを要求することができる。ウェブ閲覧デバイス130のウェブブラウザ131(例えば、APPLEのSAFARI、GOOGLEのCHROME、MOZILLAのFIREFOX、MICROSOFTのEXPLORERなど)は、ウェブサイト123ならびにウェブサイト123を使用して作成および編集されたデータを閲覧するために使用され得る。ウェブサイト開発デバイス140は、WBSエディタ110を使用してウェブサイト123を構築するために使用され得る。ウェブサイト開発デバイス140上のウェブブラウザ141は、ウェブサイト123を構築するためにWBSエディタ110にアクセスする要求を行うために使用され得る。WBSベンダスタッフデバイス150は、ウェブサイト123を構築および維持する際にウェブサイト開発デバイス140のユーザ(図示せず)のためにカスタマーサポートを提供するために使用され得る。WBSベンダスタッフデバイス150はまた、構築ツール121を作成およびカスタマイズするためにサードパーティベンダにより使用され得る。WBSベンダスタッフデバイス150はまた、WBS100自体を構成するために使用されてもよく、例えば、サイト設計者およびユーザのアカウントの管理、上記のサイトまたはページテンプレートの管理(新しいテンプレートの作成または既存のテンプレートの編集)、またはWBS100を含む様々な要素を管理するために使用されてもよい。
いくつかの実施形態では、ウェブサイト閲覧デバイス130、ウェブサイト開発デバイス140、およびWBSベンダスタッフデバイス150は、物理的に異なるデバイスであり得る。他の実施形態では、それらは、異なるクレデンシャルおよび/または異なる役割を使用して同じデバイスからアクセスされる異なるビューであり得る。いくつかの実施形態では、ウェブブラウザ131、141、および151は、同じもしくは異なるデバイス上の同じブラウザもしくは異なるブラウザまたは同じブラウザ上の異なるタブであり得る。
ウェブサイト閲覧デバイス130、ウェブサイト開発デバイス140、およびWBSベンダスタッフデバイス150は、ネットワーク160を介してウェブサイト123にアクセスすることができる。いくつかの実施形態では、ウェブサイト閲覧デバイス130、ウェブサイト開発デバイス140、およびWBSベンダスタッフデバイス150は、モバイルデバイス、ラップトップ、デスクトップコンピュータ、タブレットなどであり得る。
図1に示すように、検索エンジン170(例えば、GOOGLE、YAHOO、BINGなど)は、WBS100とやり取りするか否かにかかわらず、ネットワーク160を介してサイトエリアデータベース124に格納されたウェブサイト123のインデックス可能なウェブページ125にアクセスすることができる。検索エンジン170は、発見しやすいようにウェブサイト123のインデックス可能なウェブページ125をインデックスし、それによりウェブサイト123を閲覧するためにウェブサイト閲覧デバイス130を使用するユーザの数を増やすことができる。いくつかの実施形態では、構築ツール121はさらに、ユーザが検索エンジン170を介してインデックスおよび検索するためにウェブサイト123を最適化できるようにする。例えば、構築ツール121は、ユーザが特定のインデックス可能なウェブページ125のヘッダーに表示されるテキスト、インデックス可能なウェブページ125の特定の場所に表示されるテキスト、またはインデックス可能なウェブページ125に(例えば、メタデータとして)関連付けられているテキストを
選択できるようにする。
選択できるようにする。
図2は、本開示のいくつかの実施形態による、WBS100の例示的な構造を示している。図2に示すように、WBS100は、図1に関連して上述したように、ウェブサイトの構築およびホスティングの両方のためのコンポーネントを含むサイトエリアデータベース124を含む。
いくつかの実施形態では、インデックス可能なウェブページ125は、フロントエンド126のコンポーネントにデータグループ210からのデータが投入され得る動的または仮想ウェブページであり得る。データグループ210は、複数のウェブページに関連付けられてもよい。データグループ210は、データ要素211を含むデータ要素から構成され得る。データ要素211は、インデックス可能なウェブページ125のフロントエンド126で使用される構築ツール121の1つまたは複数のコンポーネントに関連付けられ得る。一例として、データグループ210は従業員データベースであり、各データ要素211が複数のデータフィールド(名前、年齢、部門情報など)を含む従業員レコードであり得る。これらの複数のフィールドが、インデックス可能なウェブページ125のフロントエンド126における複数の表示されたコンポーネント(表示フィールド)に投入されるために使用され得る。いくつかの実施形態では、データグループ210はテーブルの一部としてサイトエリアデータベース124に格納され、データ要素211はそのテーブルの行である。データグループ210に関連付けられたウェブページは、例えば、動的ウェブページであり得る。
データ要素210は、URL関連付けDB220に関連付けられ得る。ユーザがウェブ閲覧デバイス130を使用してURLを入力することによりウェブサイト123のインデックス可能なウェブページ125にアクセスすると、URL(またはそのセグメント)は、参照のために、URL関連付けDB220に格納されたURLまたはURLセグメントと照合され得る。データグループは、URL関連付けDB220のURLまたはURLセグメントに関連付けられ得る。URL関連付けDB220内のURLまたはURLセグメントは、関連付けられたインデックス可能なウェブページ125を使用して仮想または動的ウェブページを生成する際に使用するデータグループを判定するのに役立ち得る。いくつかの実施形態では、インデックス可能なウェブページ125は動的または仮想ウェブページのテンプレートであり、実際のウェブページはURL関連付けDB220のURLを使用して判定されたデータグループ210のデータを使用して生成される。
データ要素210は、ウェブ閲覧デバイス130を使用してユーザが入力した、またはウェブサイト123のウェブページ125にアクセスするために他の仕方で提供されたURL(またはURLセグメント)を分析するソフトウェアベースのルータを使用して判定され得る。ソフトウェアベースのルータによるURLの分析により、データグループ210のデータ要素211にアクセスするためのキーが生成され得る。例えば、http://mysite.wix.com/users/20というURLを使用すると、ソフトウェアベースのルータがURLを分析して、「users」というプレフィックスがデータグループに関連付けられ、「20」というサフィックスがキーであることを判定することができ、その結果、キー値「20」により識別される「ユーザ」関連データグループ内のデータ要素をルックアップする。本明細書で説明するように、ソフトウェアベースのルータは、URLのサフィックスまたはURL内のパラメータを分析して、表示するウェブページのバージョンまたはウェブページのコンテンツを判定するように構成され得る。上記のすべては、ユーザが直接入力するのではなく、システムがなんらかの仕方で受信するURL(例えば、ウェブサイトの別のページまたはページ関連コードにより自動的に生成されるURL)に適用され得る。本システムはまた、複数の並行して定義されたソフトウェアルータもサポートし、ウェブサイト構築システム100は、受信したURLの初期分
析を実行して、定義されたソフトウェアルータのどれを使用するかを判定する。そのような分析は、受信したURLに基づいて、URL関連付けDB220に含まれる定義に基づいて、または追加情報または条件(システム環境条件など)に基づいて判定を行うことができる。
析を実行して、定義されたソフトウェアルータのどれを使用するかを判定する。そのような分析は、受信したURLに基づいて、URL関連付けDB220に含まれる定義に基づいて、または追加情報または条件(システム環境条件など)に基づいて判定を行うことができる。
第1の命令240は、ウェブブラウザ141によりアクセスされる1セットの命令であり、プロセッサ260を通じて構成可能であり得る。第1の命令240は、ウェブブラウザ141が、構築ツール121を含むツールの格納されたライブラリにリモートでアクセスするのを助ける。オンラインエディタインターフェース243は、ウェブブラウザ141上のWBSエディタ110ソフトウェアの視覚的表現であり得る。オンラインエディタインターフェース243は、構築ツール121およびインデックス可能なウェブページ125の関連するフロントエンド126およびバックエンド127コードの助けを借りて、インデックス可能なウェブページ125のフロントエンド126レイアウト実装を作成および編集するために使用される。第1の命令240と同様に、追加の命令(例えば、他の命令の中でも第2の命令250および第3の命令260)もプロセッサ260およびウェブブラウザ141にアクセス可能であってもよい。
ウェブブラウザ141は、ウェブサイト123の異なる部分間をナビゲートするためのナビゲーションインターフェース242と、ウェブサイト123のアクセスされた部分を編集するためのオンラインエディタインターフェース213と、を表示することにより、ウェブサイト123を構築するために使用される。WBS100内のWBSエディタ110を表すコードをウェブブラウザ141に送信して、ナビゲーションインターフェース242およびオンラインエディタインターフェース243を表示することができる。
図3は、本開示のいくつかの実施形態による、トリガに関連付けられたバックエンドコードの実行へのパスを示している。図3に示すように、トリガ310により、バックエンド127に関連付けられたコードの実行がもたらされ得る。トリガ310は、例えば、ウェブサイト123のインデックス可能なウェブページ125と対話するウェブ閲覧デバイス130のユーザが特定のアクション(例えば、マウスまたはタッチパッドのクリック、選択、カーソルのホバー、リロード要求、テキストの入力、マルチメディアコンテンツのアップロードなど)を行ったときに発生し得る。トリガ310はまた、非対話イベント中にも発生し得る。例えば、定期的な時間ベースのアクションまたはデータベースの更新により、バックエンド127および/またはフロントエンド127のコードのトリガおよび実行が発生するのであってもよい。トリガ310はカスタマイズ可能であり、多くの異なる形態を取り得る。さらに、バックエンド127に関連するコードの実行をもたらす必要がある対話は、プログラム可能なイベント320を介して行われてもよい。プログラム可能なイベント320は、フロントエンド126とバックエンド127とをリンクするフックを介して実行するために、バックエンド127に制御を渡す。プログラム可能なイベント320とバックエンド127との間で制御を渡すために使用されるフックの種類は、構成可能であってもよく、トリガ310を引き起こした対話の種類または他の種類のイベントに依存する場合もある。プログラム可能なイベント320は、他の可能な種類のフックの中でも、データフック330、ウェブフック340、またはデータバインディングルータフック350のうちの1つまたは複数を利用して、バックエンド127でコードを実行するためにバックエンド127に制御を渡す。
ウェブブラウザ131に示されるウェブサイト123のインデックス可能なウェブページ125上で、ウェブ閲覧デバイス130のユーザによりデータ更新が入力されると、データフック330が使用されて、プログラム可能なイベント320からバックエンド127に制御を渡すことができる。例えば、フォームの送信はデータ更新と見なすことができ、データフック330が使用されて、バックエンド127に制御を渡すことができ、バッ
クエンド127はいくつかの実施形態ではデータベースエントリを作成または更新する。同様に、別の例として、ブログまたはソーシャルメディアインターフェースへのテキストの投稿を、データフック330に関連付けられたデータ更新とすることができる。データフック330はまた、API呼び出しを介してプログラムでバックエンド127に制御を渡すために使用され得る。例えば、定期的な時間ベースのアクショントリガ310は、削除または非アクティブとしてマークされる期間よりも古いデータベース内のエントリをもたらし得る。
クエンド127はいくつかの実施形態ではデータベースエントリを作成または更新する。同様に、別の例として、ブログまたはソーシャルメディアインターフェースへのテキストの投稿を、データフック330に関連付けられたデータ更新とすることができる。データフック330はまた、API呼び出しを介してプログラムでバックエンド127に制御を渡すために使用され得る。例えば、定期的な時間ベースのアクショントリガ310は、削除または非アクティブとしてマークされる期間よりも古いデータベース内のエントリをもたらし得る。
ウェブフック340は、ウェブモジュール機能がインポートされ、フロントエンド126の一部であるコードで呼び出されたときに、プログラム可能なイベント320からバックエンド127に制御を渡すために使用され得る。いくつかの実施形態では、例えば、フロントエンド126の一部であるコードはフロントエンドスクリプトと呼ばれ、ウェブ閲覧デバイスのユーザが、ウェブブラウザ123に表示されたウェブサイト123のインデックス可能なウェブページ125のフロントエンド126コンポーネントと対話するときに実行される。例えば、ウェブフック340は、インデックス可能なウェブページ125のユーザが、アプリを利用すること、購入を行うこと、インデックス可能なウェブページ125上のコンテンツにサブスクライブすることなどに基づき得る。
データバインディングルータフック350は、ウェブ閲覧デバイス130のユーザによってウェブブラウザ131の特定のURLにナビゲートすることにより特定の動的ウェブページが要求されたときに、プログラム可能なイベント320からバックエンド127に制御を渡すために使用され得る。例えば、ウェブブラウザ131のアドレスバーにURLを入力するか、ウェブブラウザ131で表示されているウェブサイト123のインデックス可能なウェブページ125のハイパーリンクをクリックするか、事前に定義されたまたはプログラムで生成されたURLに自動的にナビゲートする動作を実行することにより、ナビゲートすることができる。データバインディングルータフック350は、判定されたデータグループ210のデータ要素211をバックエンド127コードの機能で定義されたウェブページのテンプレートに適用するために、データグループ210および実行するバックエンド127コード機能を判定するのを助ける。
いくつかの実施形態では、データバインディングルータフック350は、ソフトウェアベースのルータと共に機能してもよい。例えば、インデックス可能なウェブページ125にアクセスするユーザがインデックス可能なウェブページ125のURLを入力すると、ソフトウェアベースのルータは、インデックス可能なウェブページ125に表示するデータを判定することができ、表示する特定のウェブページさえも判定することができる。ルータは、URLの最初の部分(またはURLの別のセグメント)であるプレフィックスに関連付けられ得る。例えば、http://www.wix.com/labelというURLでは、「label」がプレフィックスであり得る。さらに、http://www.wix.com/label/sub-labelというURLでは、「sub-label」がサフィックスであり得る。提供されるURLの特定のセグメント(例えば、プレフィックス、サフィックス、またはパラメータの値)に基づいて、ルータは、いずれかに関連付けられたコンテンツ、またはいずれかに関連付けられた特定のウェブページを表示すべきであることを判定できる。例えば、プレフィックスがルータに関連付けられ、サフィックスが選択されたルータに渡されて、アクセスすべきページまたはページで使用すべきデータを判定できる。ルータはまた、選択したデータおよびテンプレートに基づいて完全な仮想ページまたは動的ページを生成するために使用され得る。このようにして、ウェブサイト123のインデックス可能なウェブページ125は、このようなウェブページに対するユーザの対話の仕方に基づいて動的にされ、カスタマイズ可能にされ得る。
データバインディングルータフック350はまた、ウェブサイト閲覧デバイス130上
でのウェブサイト123とのユーザ対話に続く内部イベントに基づいて制御を渡すように機能し得る。例えば、データバインディングルータフック350は、ユーザがルーティング先のページにアクセスするパーミッションを持っているか否かを確認するために、上記のようにページへのルーティングを判定する前に機能を実行するために登録され得る。データフック330は、場合により、同じトリガ310に関してデータバインディングルータフック350の前または後に実行できる。例えば、ウェブサイト123に接続されたデータベースに対してクエリを実行した後に、アクティブではなくなったエントリを除外するためにデータフック330が実行される場合がある(例えば、商店のウェブサイトは、データベースクエリ検索結果から販売されなくなった製品をフィルタリングする場合がある)。よって、本システムは、フックの様々な組み合わせの動作、およびフックの相互連鎖をサポートできる。
でのウェブサイト123とのユーザ対話に続く内部イベントに基づいて制御を渡すように機能し得る。例えば、データバインディングルータフック350は、ユーザがルーティング先のページにアクセスするパーミッションを持っているか否かを確認するために、上記のようにページへのルーティングを判定する前に機能を実行するために登録され得る。データフック330は、場合により、同じトリガ310に関してデータバインディングルータフック350の前または後に実行できる。例えば、ウェブサイト123に接続されたデータベースに対してクエリを実行した後に、アクティブではなくなったエントリを除外するためにデータフック330が実行される場合がある(例えば、商店のウェブサイトは、データベースクエリ検索結果から販売されなくなった製品をフィルタリングする場合がある)。よって、本システムは、フックの様々な組み合わせの動作、およびフックの相互連鎖をサポートできる。
図4は、本開示のいくつかの実施形態による、ウェブブラウザ141を介してウェブ開発デバイス140上でアクセスされる開発モードの例示的な動的ウェブページ125を示すブロック図である。図4に示すように、オンラインエディタインターフェース243は、統合インターフェース410およびプレビューインターフェース420から構成される。
統合インターフェース410は、ウェブサイト123のインデックス可能なウェブページ125を開発または構築するために使用され得る。上述のように、統合インターフェース410は、構築ツール121へのアクセスを提供し得る。構築ツール121は、ウェブサイト123のインデックス可能なウェブページ125の編集に役立つ編集ツール411を含み得る。いくつかの実施形態では、統合インターフェース410は、開発中にウェブブラウザ141上に表示される別個のセクションであり得る。他の実施形態では、統合インターフェース410は、様々なツールおよびユーザインターフェースセクションの総称であり得る。いくつかの実施形態では、統合インターフェース410は、表示されるウェブページの別個のセクションまたはフローティングウィンドウもしくはフレームであり得る。いくつかの実施形態では、統合インターフェース410のコンポーネントは、ウェブブラウザ141のセクション内に浮くことができる。
フロントエンド126およびバックエンド127は、編集モードで一緒に、または別々のウィンドウで表示または表現され得る。いくつかの実施形態では、それらは一度に1つだけ表示され得る。また、バックエンド127は表示されているウェブページ125またはウェブサイト123に固有ではない場合があり、その一部または全部がウェブサイトおよび異なるウェブサイトの開発者の間で共有される場合がある。開発者がウェブサイト123を保存すると、フロントエンドはフロントエンド126の形式で保存され得る。
プレビューインターフェース420は、実世界のように、すなわち仮想ウェブページ421を表示するウェブ閲覧デバイス130のウェブブラウザ131に表示されるようにウェブページ125を表示することにより、ユーザが構築されているウェブサイト123を視覚化するのに役立つ。各仮想ウェブページ421は、一意の識別子422に関連付けられ得る。いくつかの実施形態では、一意の識別子422は、他のURL210と共にサイトエリアデータベース124に格納されたURLまたはURLセグメントである。識別子422の他の形式も可能である。
図5は、本開示のいくつかの実施形態による、開発モードにある例示的な動的または仮想ウェブページを示すブロック図である。例えば、図4に関連して上述したように、動的または仮想ウェブページは仮想ウェブページ421であり得る。
図5に示すように、統合インターフェース410は、構築ツール121およびインデッ
クス可能なウェブページ125を表示する。この例示的な図において、フロントエンド126は、ページのコンテンツ(例えば、テキスト、グラフィックス、ウィジェットなど)を視覚的に編集するためにWYSIWYGエディタを使用して示されている。いくつかの実施形態では、フロントエンド126はコードとして直接編集され得る。いくつかの実施形態では、構築ツール121は、統合インターフェース410内のユーザインターフェースセクションである。さらなる実施形態では、構築ツール121は、オンラインエディタインターフェース243のメニュー項目によってアクセスされ得る。いくつかの実施形態では、構築ツール121から選択された特定のウェブサイト構築ツールは、統合インターフェース410のフロントエンド126セクションにおいてドラッグアンドドロップされ得る。インデックス可能なウェブページ125のフロントエンド126は、構築ツール121の視覚的な構成を示している。
クス可能なウェブページ125を表示する。この例示的な図において、フロントエンド126は、ページのコンテンツ(例えば、テキスト、グラフィックス、ウィジェットなど)を視覚的に編集するためにWYSIWYGエディタを使用して示されている。いくつかの実施形態では、フロントエンド126はコードとして直接編集され得る。いくつかの実施形態では、構築ツール121は、統合インターフェース410内のユーザインターフェースセクションである。さらなる実施形態では、構築ツール121は、オンラインエディタインターフェース243のメニュー項目によってアクセスされ得る。いくつかの実施形態では、構築ツール121から選択された特定のウェブサイト構築ツールは、統合インターフェース410のフロントエンド126セクションにおいてドラッグアンドドロップされ得る。インデックス可能なウェブページ125のフロントエンド126は、構築ツール121の視覚的な構成を示している。
いくつかの実施形態では、バックエンド127は、統合インターフェース410内のフローティングウィンドウとして示されている。他の実施形態では、バックエンド127は、フロントエンド126と同様の別個のセクションであり得る。バックエンド127を表すコードは非表示であってもよく、要求されない限り表示されなくてもよい。いくつかの実施形態では、すべてのバックエンド127コードが常に表示され、他の実施形態では、構築ツール121からの単一要素に関連付けられたバックエンド127コードのみが表示される。
WBS100は、構築ツール121から要素を選択し、フロントエンド126に要素を配置するとスケルトンコードを自動的に生成するように構成されてもよい。バックエンド127に示される生成されたスケルトンコードは、例えば、シェル関数521およびシェルコード522を含み得る。シェル関数521およびシェルコード522は共に、トリガ310によって実行されるコード内のプログラム可能なイベント320を表す。いくつかの実施形態では、図示のように、buttonClickというシェル関数521は、ボタンをクリックするイベントを表すコードである。ボタンクリックのトリガは、プログラム可能なイベントbuttonClickをもたらす。
図6は、本開示のいくつかの実施形態による、バックエンド機能127の開発方法600を示すフローチャートである。いくつかの実施形態では、方法600は、上述のように、WBS100のコンポーネントによって実行され得る。
図6に示すように、ステップ610において、WBS100は、ユーザがウェブブラウザ141を介してウェブサイト123開発に関する要求を行うと、ウェブ開発デバイス140のユーザからサイトエリアデータベース124の構築ツール121にアクセスする要求を受信する。上述のように、構築ツール121の例としては、ウィジェット、グラフィックス、および他のコンテンツが挙げられる。
ステップ620において、WBS100は、ウェブブラウザ141を介したウェブサイト開発デバイス140からの要求に応じて第1の命令240を送信する。要求は、ネットワーク160を介してWBS100により受信される。要求はウェブサイトCMS120に転送される。ウェブサイトCMS120は、プロセッサ260により要求されると第1の命令240へのアクセスを提供し、第1の命令240がウェブサイトブラウザ141に送信される。第1の命令230は、サイトエリアデータベース124に格納された構築ツール121へのアクセスを提供し、これにより、ウェブページ125のフロントエンド126およびバックエンド127を構築することが可能になる。
ステップ630において、WBS100は、ネットワーク160を介してウェブサイト開発デバイス140から構築ツール121内のツールを使用する要求を受信すると、規則
に基づいて構築ツール121内の選択されたツールのスケルトンコードを自動的に生成する。例えば、図5に関連して上述したように、スケルトンコードは、マウスクリック、ホバー、コンテンツ選択などのイベントに関連付けられ得る。
に基づいて構築ツール121内の選択されたツールのスケルトンコードを自動的に生成する。例えば、図5に関連して上述したように、スケルトンコードは、マウスクリック、ホバー、コンテンツ選択などのイベントに関連付けられ得る。
ステップ640において、WBS100は、ウェブブラウザ141に表示するためにウェブサイト開発デバイス140にスケルトンコードを送信し得る。
ステップ650において、WBS100は、フロントエンド126が編集または作成されているウェブページ123に関連付けられたカスタマイズされたバックエンド機能127へのアクセスを提供し得る。上述のように、バックエンド機能127は、様々な異なる形態を取り得て、様々な定義されたイベントに基づいて発生するように構成され得る。
ステップ660において、WBS100は、ウェブブラウザ141を介してウェブサイト開発デバイス140のユーザからの仕様を受信して、カスタマイズされたバックエンド機能127をアクティブ化するためのプログラム可能なイベント320を構成することができる。
ステップ670において、WBS100は、ウェブブラウザ141を介してウェブサイト開発デバイス140のユーザから、バックエンド機能127を実装するユーザ編集可能コードを受信することができる。ユーザは、コードの機能を変更したり、コードを更新したりなどして、コードを編集できる。
ステップ680において、WBS100は、ネットワーク160を介してウェブサイト開発デバイス140から受信した、編集されたユーザ編集可能コードをサイトエリアデータベース124に格納することができる。次いで、編集されたユーザ編集可能コードは、デプロイ可能な状態になって、インデックス可能なウェブページ125のためにカスタマイズされたバックエンド127機能を提供できる。
図7は、本開示のいくつかの実施形態による、バックエンドコード127の実行をトリガする方法700を示すフローチャートである。上述のように、方法700は方法600と併せて実行されてもよい。上記の議論と整合して、方法700はWBS100のシステムで実行されてもよい。
図7に示すように、ウェブサイト閲覧デバイス130のユーザは、ステップ711に示すようにインデックス可能なウェブページ125で遷移すること、ステップ712に示すようにウェブサイト閲覧デバイス130のユーザがインデックス可能なウェブページ125と対話した場合、またはステップ713に示すようにユーザがインデックス可能なウェブページ125に対する更新を入力し、トリガ310を引き起こす場合のいずれかにより、バックエンド127に関連付けられたプログラム可能なイベント320をトリガ310することができる。例えば、ステップ711は、ユーザが同じウェブサイト123の別のウェブページ部分に関連付けられているインデックス可能なウェブページ125のネストされたハイパーリンクをクリックすることを含み得る。同様に、ステップ711は、ユーザがインデックス可能なウェブページ125の「次」または「続行」のハイパーリンクをクリックして、後続の関連ページを閲覧することを含み得る。ステップ712は、例えば、ユーザが、インデックス可能なウェブページ125上のグラフィックまたはテキスト上にカーソルをホバーすること、所定の期間停止すること、インデックス可能なウェブページ125上の画像またはテキストをクリックすることなどを含み得る。ステップ713は、ユーザが、インデックス可能なウェブページ125上のテキストコンテンツを更新すること、画像またはビデオファイルをインデックス可能なウェブページ125にアップロードすること、インデックス可能なウェブページ125上のフォームに入力すること、特定
のアクションをもたらす期間タイマー、データベースの更新などを含み得る。
のアクションをもたらす期間タイマー、データベースの更新などを含み得る。
ステップ720において、WBS100は、プログラム可能なイベント320の通知を受信すると、これに応答して、プログラム可能なイベント320に関連付けられたトリガ310にアクセスする。上述のように、プログラム可能なイベント320は、データフック330、ウェブフック340、データバインディングルータフック350などの様々な種類のフックに基づき得る。プログラム可能なイベント320に関連付けられたフックは、サイトエリアデータベース124に格納されているウェブサイト123の内部データ(例えば、Wixデータ)にアクセスすることを含み得る。
ステップ730において、WBS100は、場合により、オンラインサイトエリアデータベース124およびリモートウェブブラウザ141の外部のデータを(例えば、外部データベース、別のウェブサイト、リモートサービスなどから)取得することができる。いくつかの実施形態では、そのようなデータは、プログラム可能なイベント320の一部として使用されてもよい。
ステップ740において、WBS100は、編集されたユーザ編集可能なバックエンド127コードを実行するようにプロセッサ260に要求することができる。したがって、プログラム可能なイベント320では、カスタマイズされたバックエンド機能がインデックス可能なウェブページ125で発生する場合がある。上述のように、このカスタマイズされたバックエンド機能は、ユーザからの入力により、その機能、データソース、およびタイミングの観点から定義され得る。ユーザは、カスタマイズされたバックエンド機能のこれらの属性のそれぞれについて、コードの作成および編集に対するガイド付き制御を与えられ得る(例えば、関数全体を最初からコーディングする必要はないが、代わりにテンプレートまたはコードのサンプルが提供される)。
本開示と整合するシステムおよび方法はまた、ウェブサイトのホスティング、クライアントへのウェブサイトの提供、ウェブサイトの負荷の監視、およびウェブサイトの負荷動態への応答のための機能を含むオンデマンドウェブサイトホスティングシステムを対象としている。いくつかの実施形態では、オンデマンド実行可能インスタンスは、ウェブサイトの使用アクティビティを監視し、一部または全部の実行インスタンスを自動的にスピンアップまたは除去してもよい。さらに、以下で説明するように、ウェブサイトまたはページを提供するためにスピンアップされたウェブサーバ実行インスタンスは、汎用ウェブサイトコードとサイト固有またはページ固有コードとの組み合わせを含むことができ、その結果、高度に調整された個別のウェブサイトおよびページの提供の応答が早く、非常に効率的になる。
一般に、ユーザがウェブサイトと対話するとき、様々なHTTP要求を行い得る。例えば、初期のHTTP要求がウェブページをロードするために行われ得る(これにより、状況によっては、画像やスクリプトなどの追加のページ要素をロードする追加のHTTP要求がトリガされ得る)。加えて、ユーザはセッション中にHTTP要求を行うこともできる(例えば、フィールドの値の選択、ハイパーリンクされた画像のクリックなど)。さらに、ユーザは、フォームの送信などを通じて、データ関連のHTTP要求を行うことができる。加えて、ユーザはバックエンドHTTP要求を行うことができ、これにより、(例えば、本明細書で説明するバックエンドコードを介して)バックエンド機能がアクティブ化され得る。
ページのロードおよびHTTP要求の処理のプロセスを高速化するために、本システム(例えば、WBS100)は、特定のウェブサイトまたはページのために構成されたドッカーコンテナまたはサーバレスコードの高速起動を利用するように構成され得る。いくつ
かの実施形態では、本明細書で説明するように、スタンバイコンテナまたは他の仮想コンピューティングリソースのプールには、すべての関連する非サイト固有コードが提供され得るが、ユーザ固有またはサイト固有コードは提供されない。次いで、本システムは、特定のウェブサイトに関するサーバへの要求をライブポートでリッスンし得る。特定のウェブサイトに関連付けられたライブコンテナまたは他の仮想コンピューティングリソースがある場合、本システムはそれに接続し得る。それ以外の場合、本システムは、プールのスタンバイコンテナを使用し、要求されたサイト固有のコンテンツをプールに投入してもよいし、そのようなコンテンツをロードするようにプールに命令してもよい。所与のサイトのサイト固有のコンテンツがロードされると、コンテナは所与のサイトに関連付けられたコンテナのプールに加わる。本明細書で説明するように、投入されたサイトレベルのコンテンツは、実際のサイトページを含んでも含まなくてもよい。そのようなサイトページ情報は、例えば、実際のブラウザ対応ページマテリアル(例えば、HTML、CSS、およびJavaScript(登録商標)コードのコレクション)、クライアントサイドもしくはサーバサイドのコード(WBSビューアモジュールなど)によりブラウザ対応マテリアルに変換される基礎となるサイト定義データ(例えば、XMLファイルまたはJSON表現を使用する)、またはフロントエンドもしくはバックエンドコード(例えば、クライアント、サーバ、またはその両方で実行するためにページによって呼び出されるJavaScriptコード)であり得る。
かの実施形態では、本明細書で説明するように、スタンバイコンテナまたは他の仮想コンピューティングリソースのプールには、すべての関連する非サイト固有コードが提供され得るが、ユーザ固有またはサイト固有コードは提供されない。次いで、本システムは、特定のウェブサイトに関するサーバへの要求をライブポートでリッスンし得る。特定のウェブサイトに関連付けられたライブコンテナまたは他の仮想コンピューティングリソースがある場合、本システムはそれに接続し得る。それ以外の場合、本システムは、プールのスタンバイコンテナを使用し、要求されたサイト固有のコンテンツをプールに投入してもよいし、そのようなコンテンツをロードするようにプールに命令してもよい。所与のサイトのサイト固有のコンテンツがロードされると、コンテナは所与のサイトに関連付けられたコンテナのプールに加わる。本明細書で説明するように、投入されたサイトレベルのコンテンツは、実際のサイトページを含んでも含まなくてもよい。そのようなサイトページ情報は、例えば、実際のブラウザ対応ページマテリアル(例えば、HTML、CSS、およびJavaScript(登録商標)コードのコレクション)、クライアントサイドもしくはサーバサイドのコード(WBSビューアモジュールなど)によりブラウザ対応マテリアルに変換される基礎となるサイト定義データ(例えば、XMLファイルまたはJSON表現を使用する)、またはフロントエンドもしくはバックエンドコード(例えば、クライアント、サーバ、またはその両方で実行するためにページによって呼び出されるJavaScriptコード)であり得る。
図8は、本開示のいくつかの実施形態による、オンデマンドウェブサーバ実行インスタンスシステム800のブロック図を示している。図8に示すように、オンデマンドシステム800は、プロセッサ260と、現在または最近提供されたウェブサイトを格納するためのメモリ820と、提供するために利用可能なすべてのウェブサイトを格納するための永続性記憶装置830と、を備える。いくつかの実施形態では、オンデマンドシステム800はまた、新しいウェブサーバ実行インスタンスがウェブサイト要求を処理する必要があるか否かを判定するのを助けるために、プロキシサーバ840を備え得る、またはプロキシサーバ840に関連付けられ得る。
WBSシステム100およびオンデマンドシステム800は、ウェブサイトを編集するためにコードを格納し、ウェブ要求を処理するためにコードにアクセスする。WBSエディタ110は、ウェブ開発デバイス140から受信した編集要求に関するウェブサイトのウェブページを提示するために使用される。ウェブサーバ実行インスタンスは、WBSエディタ110を使用して作成および編集されたコードおよびページ定義でインスタンス化され、ウェブサイト123の編集中および実行時にインデックス可能なウェブページ125を閲覧するためにサイトエリアデータベース124に格納される。いくつかの実施形態では、オンデマンドシステム800は、WBS100内のサブシステムであってもよい。いくつかの他の実施形態では、WBS100およびオンデマンドシステム800は、ウェブサイト123のインデックス可能なウェブページ125のフロントエンド126およびバックエンド127へのアクセスを共有してもよい。いくつかの実施形態では、永続性記憶装置830は、WBS100のサイトエリアデータベース124と同様のデータベースであってもよい。WBS100は、フロントエンド126を構造化データ形式で格納することができるが、オンデマンドシステム800は、フロントエンド126を、ウェブ閲覧デバイス130のウェブブラウザ131によって理解されるコード形式に変換する場合がある。WBS800とは異なり、オンデマンドシステム800は通常、インデックス可能なウェブページ125の格納されたフロントエンド126およびバックエンド127への読み取り専用アクセスを持つ(ウェブサイトの実行時サービスに使用する場合)。しかし、WBSエディタ110と組み合わせて使用する場合、オンデマンドシステム800は、ウェブサイト125のフロントエンド126および/またはバックエンド127、ならびにウェブサイト125の他のコンポーネントを修正できる。WBS100エディタは、(エディタコードが汎用ウェブサイトサーバコード824の一部である状態で)オンデマン
ドシステム800と連携し得るが、エディタ自体がオンデマンドシステム800の上位のレイヤとして機能でき、その機能および決定(例えば、到来する要求を処理するための実行インスタンスの割り当て)に直接影響しないことを明確にしておきたい。
ドシステム800と連携し得るが、エディタ自体がオンデマンドシステム800の上位のレイヤとして機能でき、その機能および決定(例えば、到来する要求を処理するための実行インスタンスの割り当て)に直接影響しないことを明確にしておきたい。
プロセッサ260は、オンデマンドシステム800の要素をホストする1つまたは複数のサーバに関連付けられ得る。例えば、プロセッサ260は、単一のサーバまたは協調サーバ群(例えば、サーバファーム)に関連付けられてもよい。さらに、いくつかの実施形態では、要素のそれぞれ(例えば、メモリ820内の各要素、永続性記憶装置830内の各要素、プロキシサーバ840など)は、独自のプロセッサ260を(例えば、専用サーバの一部として)持つことができる。プロセッサ260の数または種類に関係なく、オンデマンドシステム800に示されている要素のそれぞれは、独立と協調方式との両方で機能することができる。
メモリ820は、クライアントにウェブサイトまたはページを提供するための1つまたは複数のウェブサーバ実行インスタンスを有し得る。使用中のインスタンス821は、現在またはアクティブにウェブサイトを提供しているウェブサーバ実行インスタンスであり得る。一方、利用可能なインスタンス822は、現在特定のウェブサイトをホストしていないがホスト可能である、メモリ820で利用可能な1セットのウェブサーバインスタンスであり得る。いくつかの実施形態では、利用可能なインスタンス822内のウェブサーバ実行インスタンスの数は一定の数であり得る。いくつかの他の実施形態では、利用可能なインスタンス822内のウェブサーバ実行インスタンスの数は変化し、使用中のインスタンス821のウェブサーバ実行インスタンスの数に依存し得る。例えば、合計10,000個の実行インスタンスがある場合、使用中のインスタンス821の増加は、利用可能なインスタンス822の減少を意味することができ、その逆も同様である。利用可能なインスタンス822内のウェブサーバ実行インスタンスの数はまた、使用中のインスタンス821のウェブサーバ実行インスタンスの数の割合とすることもできる。使用中のインスタンス821は、いくつかの実施形態では、ウェブサーバ実行インスタンス823および現在ウェブサイトを提供している他のインスタンスを識別する一意の識別子を含むデータ構造によって表され得る。いくつかの実施形態では、オンデマンドシステム800によってホストされるウェブサイトごとに同様のデータ構造を維持することができ、そのようなデータ構造はすべて、使用中のインスタンス821を集合的に表す。
ウェブサーバ実行インスタンス823は、ウェブサーバの助けを借りてウェブサイトへの要求を処理する使用中のインスタンス821のうちの1つであり得る。ウェブサーバ実行インスタンス823は、汎用ウェブサイトサーバコード824とウェブサイトN固有コード833とを含み得る。例えば、汎用ウェブサイトサーバコード824は、すべてのウェブサーバ実行インスタンスに含まれる共通コードであり得る。例えば、このような共通コードは、基礎となるウェブサーバ実行インスタンスシステム要素(オペレーティングシステム、ウェブサーバ(例えば、Apache)、データベースサーバなど)を含み得る。いくつかの実施形態では、このような共通コードは、共通外部サービスおよびプラグインと共に、WBS100エディタまたはランタイム環境も含み得る。加えて、いくつかの実施形態では、共通コードは、ライブラリなどの共通ウェブサイトアプリケーションレベルのサーバサイド要素、およびWBS100垂直アプリケーションなどの主要な共通項目に関連するコードを含んでもよい。共通コードはまた、特に以下で説明する共同ホストされたウェブサイトの共通コンポーネント(例えば、ギャラリー)の要素を含み得る。上記のすべてについて、汎用コードは、実際のサーバサイド要素(サーバ上で格納および実行され得る)と、クライアントサイド要素(サーバに格納され、ウェブページ要求に応じて実行するWBS100ランタイムクライアントにロードされる)と、を含み得る。いくつかの実施形態では、ウェブサイトの異なるグループは、異なる汎用ウェブサイトサーバコード824を含み得る。よって、例えば、ウェブサイトの共通所有グループは、共通の汎
用ウェブサイトサーバコード824を有し得る。これはまた、例えば、同じ垂直マーケットアプリケーションフレームワーク(例えば、レストランやホテル)に基づいた複数のサイトにも適用され得る。あるいは、異なるウェブサイトが独自の汎用ウェブサイトサーバコード824を持っていてもよく、これは、各ウェブサイト内のすべてのウェブページに関連し得る。
用ウェブサイトサーバコード824を有し得る。これはまた、例えば、同じ垂直マーケットアプリケーションフレームワーク(例えば、レストランやホテル)に基づいた複数のサイトにも適用され得る。あるいは、異なるウェブサイトが独自の汎用ウェブサイトサーバコード824を持っていてもよく、これは、各ウェブサイト内のすべてのウェブページに関連し得る。
ウェブサイトN固有コード834は、ウェブサーバ実行インスタンス823が提供するウェブサイトまたはページに固有のコード(特定のサイトのためにウェブサイト126の開発者/設計者1540が作成したフロントエンド126またはバックエンド127コードなど)を含み得る。ウェブサーバ実行インスタンス823は、ウェブサーバ(例えば、Apache、Tomcat、Nginxなど)またはWBS固有サーバを使用して、ウェブサイトN固有コード834を含むウェブサイトまたはページを提供できる。ウェブサイトN固有コード834は、例えば、ショッピングカート機能、支払い処理、データベースアクセス、アプリの組み込みまたは実行、ソフトウェアベースのルータ機能など、特定のウェブサイトまたはページに一意の機能を実行するためのコードを含み得る。上記およびここでの説明は、所与のウェブサイトまたはページに関連するウェブサイト固有コード834、およびこれに対応して、所与のウェブサイトまたはページを使用するクライアントから到来する要求を処理できるウェブサーバ実行インスタンス823に言及する。ただし、オンデマンドシステム800は、異なるレベルの特定のコード粒度で実装され得る。典型的な粒度レベルは、サイトレベル、すなわち、ウェブサイト固有コード834がサイト全体をカバーするレベルとすることができ、これは、ウェブサーバ実行インスタンス823の再利用に通常最適なレベルである。しかしながら、本システムは、サイトグループ(よく類似しているサイトのグループ)、サイト全体、サイトセクション(すなわち、1セットのページ)、および単一ページの粒度レベルを使用して実装され得る。サイトグループの場合、上記のように、多数のサイトの共通部分を汎用ウェブサイトサーバコード824に含めることもできる。
利用可能なインスタンス822のウェブサーバ実行インスタンス826は、ウェブサーバ実行インスタンス826にウェブサイトN固有コード833を投入することにより、使用中のインスタンス821のウェブサーバ実行インスタンス823が提供する同じウェブサイトを提供するために使用され得る。このようにして、ウェブサーバ実行インスタンス823は、各ウェブサイトまたはページに関連付けられた一意のウェブサイトN固有コード834に基づいて、個別のウェブサイトおよびページを生成(および提供)することができる。
永続性記憶装置830は、それぞれ第1の記憶場所831および第2の記憶場所832でオンデマンドシステム800によってホストされるすべてのウェブサイトに汎用および固有のコードを含み得る。汎用ウェブサイトサーバコード824は、例えば、第1の記憶場所831において永続性記憶装置830に格納され得る。ウェブサイト固有コード833および834は、第2の記憶場所832に格納されてもよく、それぞれウェブサイト1およびNに固有のコードであってもよい。永続性記憶装置830は、様々な実施形態において、分散ファイルシステム、データベース、または他の格納システムであってもよく、クラウドベース(例えば、サービスとしてのストレージ)であってもよい。第1の記憶場所831および第2の記憶場所832は、同じ格納システムの異なる場所にあってもよいし、永続性記憶装置830を一緒に形成する異なる格納システムにあってもよい。いくつかの実施形態では、ウェブサイト固有コード833および834はそれぞれ、異なる二次記憶場所にあってもよいし、同じ場所にあるが別々にラベル付けされていてもよい。
永続性記憶装置830の第1の記憶場所831にある汎用ウェブサイトサーバコード824は、インスタンスをスピンアップした後、ウェブサーバ実行インスタンス823と同
様のウェブサーバ実行インスタンスにコピーされ得る。このようにして、汎用ウェブサイトサーバコード824ならびに任意のウェブサイト固有コード833~834は、共通システム、ウェブフレームワーク、ライブラリ、コンポーネントおよびプラグイン、ならびに個別化された要素を含むウェブサイトまたはページを提供するために組み込まれ得る。
様のウェブサーバ実行インスタンスにコピーされ得る。このようにして、汎用ウェブサイトサーバコード824ならびに任意のウェブサイト固有コード833~834は、共通システム、ウェブフレームワーク、ライブラリ、コンポーネントおよびプラグイン、ならびに個別化された要素を含むウェブサイトまたはページを提供するために組み込まれ得る。
様々な実施形態において、メモリ820、永続性記憶装置830、およびプロキシサーバ840のコンポーネントのそれぞれは、オンプレミスコンピュータネットワーク、クラウドコンピュータネットワーク、または両方のアーキテクチャを含むハイブリッドネットワークを通じて実装されてもよい。クラウドホスティング環境の例としては、AMAZON WEB SERVICES、MICROSOFT AZURE、IBM CLOUDなど、およびウェブサイトホスティング会社により維持される独自のクラウドネットワークが挙げることができる。
プロキシサーバ840は、1セットの使用中のインスタンス821が、ウェブ閲覧デバイス130のウェブブラウザ131から生成されたウェブサイトに関する要求を処理するために利用可能なウェブサーバ実行インスタンスを含むか否かを判定するのに役立つ。プロキシサーバ840は、例えば、メモリ820とやり取りすることにより、ウェブサーバ実行インスタンスの可用性を判定する。例えば、メモリ820は、利用可能なインスタンス822および使用中のインスタンス821のリストを維持してもよいし、それらの現在のステータスを判定するためにウェブサーバ実行インスタンス823および826をポーリングしてもよいし、ウェブサーバ実行インスタンスの可用性に関する他のレポート情報を受信してもよい。いくつかの実施形態では、プロキシサーバ840は、特定のウェブサイトまたはページにアクセスする(例えば、クライアントからの)HTTP要求を処理し、特定のウェブサイトまたはページがウェブサーバ実行インスタンス823によって既にホストされているか否かを判定してもよい。さらに、いくつかの実施形態では、プロキシサーバ840は、利用可能なインスタンス822および使用中のインスタンス821のステータスを判定する際に使用するための状態テーブル941を維持してもよい。そのような状態テーブルは、そのようなリソースと、それらが既にホストしているウェブサイトまたはページとを識別し得る。
図9は、本開示のいくつかの実施形態による、オンデマンドシステム800のコンポーネント間のやり取りの概略図を示している。図2に示すように、オンデマンドシステム800のウェブサーバ実行インスタンスマネージャ950は、ウェブサーバ実行インスタンス823および826ならびにプロキシサーバ840と通信することによりウェブサーバ実行インスタンスを管理する。いくつかの実施形態では、ウェブサーバ実行インスタンスマネージャ950は、新しいウェブサーバ実行インスタンスを利用可能なインスタンス822に追加する必要があるか否かを判定し得る。このことは、例えば、ホストされている特定のウェブサイトまたはページに関連するトラフィックが増加した場合に発生し得る。いくつかの実施形態では、増加したトラフィック負荷は、過去にサイトに関して収集された定期的なトラフィック情報から推測される事前知識に基づいて予測され得る。過去のトラフィック情報には、季節的な傾向およびサイトの使用状況が最もアクティブな他の時期を把握し、特定のウェブサイトを提供するウェブサーバ実行インスタンスをより多く自動的に追加できるように収集された、毎月、毎週、毎日、および毎時のトラフィックデータが含まれ得る。いくつかの他の実施形態では、ウェブサーバ実行インスタンスマネージャ950は、使用中のインスタンス821のインスタンスが非アクティブであるか否かを判定し得る。この状況では、クライアントからウェブサイトまたはページで応答する要求がないにもかかわらず、使用中のインスタンス821が動作している、または動作可能であるため、リソースが浪費され得る。よって、以下でさらに説明するように、あらゆる非アクティブな使用中のインスタンス821は、非アクティブ化またはシャットダウンされ得る。ウェブサイトのために新しいウェブサーバ実行インスタンスを追加するプロセスと同
様に、以前の使用情報に基づいた上述のような予測を使用して、予想されるトラフィックが少ない場合にインスタンスをシャットダウンできる。ウェブサーバ実行インスタンスマネージャ950は、プロキシサーバ840に判定を委譲することにより、利用可能なインスタンス822セットにより多くのインスタンスを追加する、および/または使用中のインスタンス821のインスタンスを非アクティブとしてマークする判定を行うことができる。プロキシサーバ840は、上記のように、使用中のインスタンス821および利用可能なインスタンス822からウェブサーバ実行インスタンスを追加するか除去するかを判定するのに役立つ状態テーブル941を含むことができる。状態テーブル941は、特定の使用中のインスタンス821および利用可能なインスタンス822をそれらの現在のステータス、履歴ステータス、または予測される将来のステータスに関連付ける情報を維持し得る。このようなステータス情報は、ホストしている、将来ホストする可能性がある、または過去にホストした特定のウェブサイトまたはページを識別し得る。さらに、状態テーブル841は、さらなる情報(例えば、使用中のインスタンス821および利用可能なインスタンス822がウェブサイトまたはページをホストしている時間、使用中のインスタンス821および利用可能なインスタンス822が非アクティブである時間など)を含み得る。
様に、以前の使用情報に基づいた上述のような予測を使用して、予想されるトラフィックが少ない場合にインスタンスをシャットダウンできる。ウェブサーバ実行インスタンスマネージャ950は、プロキシサーバ840に判定を委譲することにより、利用可能なインスタンス822セットにより多くのインスタンスを追加する、および/または使用中のインスタンス821のインスタンスを非アクティブとしてマークする判定を行うことができる。プロキシサーバ840は、上記のように、使用中のインスタンス821および利用可能なインスタンス822からウェブサーバ実行インスタンスを追加するか除去するかを判定するのに役立つ状態テーブル941を含むことができる。状態テーブル941は、特定の使用中のインスタンス821および利用可能なインスタンス822をそれらの現在のステータス、履歴ステータス、または予測される将来のステータスに関連付ける情報を維持し得る。このようなステータス情報は、ホストしている、将来ホストする可能性がある、または過去にホストした特定のウェブサイトまたはページを識別し得る。さらに、状態テーブル841は、さらなる情報(例えば、使用中のインスタンス821および利用可能なインスタンス822がウェブサイトまたはページをホストしている時間、使用中のインスタンス821および利用可能なインスタンス822が非アクティブである時間など)を含み得る。
図10は、本開示のいくつかの実施形態による、ウェブサイトに関して送信されたウェブ要求に応答するための方法1000を示すフローチャートである。図10の方法1000は、ウェブ閲覧デバイス130のウェブブラウザ131から到来し、オンデマンドシステム800により受信されたウェブ要求を処理するための2つの経路を特定する。要求を処理するためのセットアップ要件により、要求されたウェブサイト固有コードが、特定のウェブサイトにアクセスする要求を処理するウェブサーバ実行インスタンスにコピーされることになり得る。
図10に示すように、ステップ1010において、オンデマンドシステム800は、永続性記憶装置830の第1の記憶場所831に汎用ウェブサイトサーバコード824を格納する。上述のように、これは、ウェブサイトのグループに共通のコード(例えば、共通の所有者が所有するものすべて、または共通の垂直サイトフレームワークに基づくもの)またはウェブサイト内のページのグループに共通のコードを格納することを含み得る。さらに、汎用ウェブサイトサーバコード824は、ウェブサイトまたはページの定義された任意のグループに関連付けられ得る。上述のように、汎用ウェブサイトサーバコード824は、オペレーティングシステム、ウェブフレームワーク、ソフトウェアライブラリ、ならびにウェブサイトコンポーネントおよびプラグインと、WBS100独自のエディタおよびビューアコードと、を含む、異なるソフトウェアレイヤの共通部分を指定するコードを含み得る。
ステップ1020において、オンデマンドシステム800は、永続性記憶装置830の第2の記憶場所832にウェブサイトN固有コード834を格納し得る。上述のように、ウェブサイトN固有コード834は特定のウェブサイトまたはウェブページに固有のものであり得る。ウェブサイトN固有コード834は、例えば、ウィジェット、アプリ、またはカスタムバックエンドもしくはフロントエンド機能を含み得る。さらに、ウェブサイトN固有コード833は、上述のように特定のウェブサイトまたはページのルータなどとして機能することができ、ユーザにより入力された、または他の仕方で提供されたURLからの1つまたは複数のセグメントが、ウェブサイトまたはページでのそのコンテンツの組み立て方を判定する(例えば、カスタムイメージ、テキスト、ハイパーリンク、フォーム、eコマース機能、パーソナル化されたコンテンツなど)。
ステップ1030において、オンデマンドシステム800は、ウェブ閲覧デバイス130上のウェブブラウザ131から受信した、ウェブサイトにアクセスする要求を受信し得
る。オンデマンドシステム800は、要求されているウェブサイトまたはページが、使用中のインスタンス821の1つまたは複数のウェブサーバ実行インスタンスによって現在処理されているか否かを確認することにより、要求を処理する。上述のように、これは、使用中のインスタンス821自体の問い合わせ、プロキシサーバ840の問い合わせ、または使用中のインスタンス821を監視する別のサービスからのレポートの取得を含み得る。ルックアップテーブルまたは状態テーブルを参照することにより、使用中のインスタンス821の現在の動作(またはその欠如)を確認することもできる。いくつかの実施形態では、単一のサーバが複数のウェブサイトまたは同じサイトの複数のクライアントにサービスを提供し、特定のサーバへのトラフィック負荷およびアクティビティが追跡され、追加の要求に応答するために使用するサーバを判定する際に考慮される。
る。オンデマンドシステム800は、要求されているウェブサイトまたはページが、使用中のインスタンス821の1つまたは複数のウェブサーバ実行インスタンスによって現在処理されているか否かを確認することにより、要求を処理する。上述のように、これは、使用中のインスタンス821自体の問い合わせ、プロキシサーバ840の問い合わせ、または使用中のインスタンス821を監視する別のサービスからのレポートの取得を含み得る。ルックアップテーブルまたは状態テーブルを参照することにより、使用中のインスタンス821の現在の動作(またはその欠如)を確認することもできる。いくつかの実施形態では、単一のサーバが複数のウェブサイトまたは同じサイトの複数のクライアントにサービスを提供し、特定のサーバへのトラフィック負荷およびアクティビティが追跡され、追加の要求に応答するために使用するサーバを判定する際に考慮される。
ステップ1040において、オンデマンドシステム800は、ウェブサーバ実行インスタンス823または使用中のインスタンス821内の他のウェブサーバ実行インスタンスが、要求されたウェブサイトを提供するか否かを確認する。「はい」である場合、プロセス1000は、いくつかの実施形態では、以下で説明するステップ1070にジャンプし得る。
ステップ1040の答えが「いいえ」である場合、プロセス1000はステップ1050に進むことができる。使用中のインスタンス821のウェブサーバ実行インスタンスのいずれも要求されたウェブサイトを提供しない場合、要求は利用可能なインスタンス822の利用可能なウェブサーバ実行インスタンスに転送され得る。いくつかの実施形態では、利用可能なインスタンス822内のウェブサーバ実行インスタンスのうちの1つが、要求されたウェブサイトを提供するために選択され得る。他の実施形態では、図10に示すように、利用可能なインスタンス822のウェブサーバ実行インスタンス826は、サービス提供の要求を受信する。
ステップ1060において、要求は、要求されたウェブサイトに整合する二次記憶場所832内のウェブサイト固有コード833をルックアップするために送信され得る。例えば、図示のように、ウェブサイト1に関する要求を受信した場合、ウェブサイト123固有コード833は整合するコードである。いくつかの実施形態では、要求されたウェブサイトに整合するウェブサイト固有コード833が識別され、ウェブサーバ実行インスタンス826にコピーされる。ウェブサーバ実行インスタンス826は、(例えば、状態テーブルまたはプロキシサーバ840において)使用中のインスタンス821のリストに追加され、利用可能なインスタンス822のリストから除去される。要求は、ウェブサーバ実行インスタンス826によって(例えば、クライアントに対して)応答される。次いで、プロセス1000は繰り返すことができる(例えば、ステップ1010、1020、または1030まで繰り返す)。さらに、ステップ1060において、ウェブサイト固有コード833は、上述のように、ユーザにより要求された特定のウェブサイトまたはページの構築へ組み込むために、ウェブサーバ実行インスタンス826に投入され得る。
図11は、本開示のいくつかの実施形態による、ウェブサイトがホストされているか否かを判定するように、また実行インスタンスを生成またはインスタンス化するように構成されたオンデマンドシステム800の図である。図11に示すように、プロキシサーバ840は、ウェブ閲覧デバイス130のウェブブラウザ131からネットワーク160を介して受信されたウェブサイト123にアクセスする要求を処理するステップを判定するために使用される。そのような判定は、要求を処理する前に、要求されたウェブサイト固有コードを使用して、ウェブサーバ実行インスタンスマネージャ950による要求の即時処理、または利用可能なインスタンス822内のウェブサーバ実行インスタンスのインスタンス化をもたらし得る。
図11に示すように、ステップ1110において、オンデマンドシステム800は、ネットワーク160を介してウェブサイト123に関する要求を受信することができる。上述のように、要求はクライアントコンピュータまたはアプリケーションから到来し得る。要求は、HTTP要求、HTTPS要求、または別の種類のネットワーク要求であり得る。
ステップ1120において、オンデマンドシステム800は、要求されたウェブサイト123の最適な提供の仕方を判定する。上述のように、判定は、現在の1セットの使用中のインスタンス821によって要求を処理できるか、または追加のウェブサーバ実行インスタンスが必要かを識別することを含み得る。例えば、オンデマンドシステム800は、使用中のインスタンス821の現在の負荷が使用量の閾値(例えば、インスタンス数の閾値、使用帯域幅の量、使用帯域幅の割合、メモリやプロセッサの電力などのサーバリソースの使用レベルなど)を過ぎたと判定し得る。その場合、特定のウェブサイトまたはページの需要を満たすために、1つまたは複数の利用可能なインスタンス822をスピンアップまたは利用する必要があると判定され得る。さらに、上述のように、オンデマンドシステム800は、使用中のインスタンス821の将来の負荷状態の予測を試みることができる。そのような予測は、例えば、以前の負荷レベルに基づいて行うことができる。使用中のインスタンス821の予測負荷レベルに基づいて、オンデマンドシステム800は、同様に、特定のウェブサイトグループ、ウェブサイト、ページセット、またはページの予測された需要を満たすために、1つまたは複数の利用可能なインスタンス822をスピンアップまたは利用する必要があると判定し得る。オンデマンドシステム800はまた、(応答時間を最適にするために)そのような到来する要求を使用中のインスタンス821のうちの1つに差し向け、また並行して、1つまたは複数の利用可能なインスタンス822が所与のウェブサイトまたはページに関連する将来の要求で利用され得るようにするために、1つまたは複数の利用可能なインスタンス822をスピンアップするように決定し得る。
ステップ1121において、判定プロセスの一部として、オンデマンドシステム800は、ウェブサイト123に関する要求(例えば、要求のコピー、または要求に関する情報)と共に、ウェブサーバ実行インスタンスマネージャ950に制御を渡すことができる。要求は、ウェブサイト123のインデックス可能なウェブページにアクセスする要求、フォームの送信、または他の様々な種類の要求であり得る。
ステップ1122において、ウェブサーバ実行インスタンスマネージャ950は、ウェブサイト123を提供する要求をどのように処理するかを判定するのを助けるために、プロキシサーバ840に判定を委譲することができる。これには、ウェブサイト123に関連付けられた現在の負荷ステータスの判定、ウェブサイトの将来の負荷の予測などを含む、上記の種類の意思決定が含まれ得る。
ステップ1123において、プロキシサーバ840は、要求されたウェブサイトを提供し得る使用中のインスタンス821のインスタンスについて、プロキシサーバ840の状態テーブル941を参照することができる。いくつかの実施形態では、状態テーブル941のルックアップは、整合するウェブサイトURLについてテーブル内の「ウェブサイト」1143と呼ばれる列を調べることを含み得る。他の識別子(例えば、URL、アカウント名、任意の名前など)も可能である。いくつかの実施形態では、オンデマンドシステム800はウェブサイトのトラフィック傾向履歴に基づいて負荷レベルを定期的に監視することができ、現在のトラフィック傾向が別段を示唆する場合を除き、ウェブサーバ実行インスタンスを自動的にスピンアップまたはシャットダウンすることができるため、オンデマンドシステム800がウェブサイトの提供要求を受信しなかった場合でも、ステップ1122が定期的に発生する。いくつかの実施形態では、ウェブサーバ実行インスタンス
マネージャ950は、要求の処理に失敗した後、ウェブサイト123に関する要求を転送して、ウェブサイト123に関する要求を処理するウェブサーバ実行インスタンスが利用可能でないことを指示する。
マネージャ950は、要求の処理に失敗した後、ウェブサイト123に関する要求を転送して、ウェブサイト123に関する要求を処理するウェブサーバ実行インスタンスが利用可能でないことを指示する。
ステップ1123において、プロキシサーバ840は、利用可能なインスタンス822のウェブサーバ実行インスタンスに要求を送信して、ウェブサイト123に関する要求を処理するためにマークされる第1の利用可能なウェブサーバ実行インスタンス826を選択することができる。他の実施形態において、ウェブサーバ実行インスタンス826は、ウェブサーバ実行インスタンス826間の差異を考慮したポリシーに基づいて選択されてもよく、これにより、要求を処理するのに適切またはより最適になる(例えば、地理的位置、実行中のアプリケーション、利用可能なメモリ、処理能力、ディスク/メモリの断片化レベルなど)。
ステップ1124において、オンデマンドシステム800は、ウェブサイト123に関する要求を処理するために、利用可能なインスタンス822内のウェブサーバ実行インスタンスを選択する。いくつかの実施形態では、ウェブサーバ実行インスタンス826が選択されて、ウェブサイト123に関する要求を処理する。
ステップ1125において、ウェブサーバ実行インスタンス826は、ウェブサーバ実行インスタンス826にウェブサイト123固有コード833を投入することにより、1セットの使用中のインスタンス121に追加され得る。いくつかの実施形態では、オンデマンドシステム800は、ウェブサーバ実行インスタンス826に関するエントリにより状態テーブル941を更新するようにプロキシサーバ840に要求することができる。よって、状態テーブルにインスタンス1142およびウェブサイト1143の識別子を持つ行を追加することを含み、状態テーブル841が変更され得る。いくつかの実施形態では、第1の利用可能なインスタンス、例えばウェブサーバ実行インスタンス826は、サイト固有コード833が投入されるように選択されてもよい。この投入の後、ウェブサーバ実行インスタンス826は、1セットの利用可能なインスタンス822から除去される。
他の実施形態では、選択は、ウェブサイト123の要求場所への地理的な近さ、または特定の地理的場所から発信され得る潜在的なウェブ要求の数に基づいてもよい。いくつかの実施形態では、複数のウェブサーバ実行インスタンスは、ウェブサイト123固有コード833を投入され、1セットの使用中のインスタンス821に追加され得る。
要求されたウェブサイト123を処理する判定1120は、タイムアウト閾値(例えば、10または100ミリ秒)をさらに有し得る。タイムアウト期間は、ウェブページ要求を処理するための一般的なウェブ標準と整合し得る。利用可能なインスタンス822の一部であるウェブサーバ実行インスタンスは、新しいウェブサイト要求が出されたときにインスタンスをスピンアップする時間を短縮するのに役立つ。よって、先行する従来のウェブサイト構築システムのコールドスタートの問題は軽減される。
ステップ1130において、ウェブサーバ実行インスタンス826は、ウェブサイト123固有コード833を使用してウェブサイト123に関する要求を処理することができる。上述のように、ウェブサイト123固有コード833を使用して生成されたウェブサイトまたはページを提供することにより、ウェブサイトのコンテンツをユーザまたはユーザがサイトに到達した仕方に合わせて調整できる(例えば、ソフトウェアベースのルータを使用するなど)。いくつかの実施形態では、投入ステップ自体が、投入されたマテリアルを修正することができ、例えば、投入されたマテリアルを、要求を行っている特定のユーザ/プラットフォーム/デバイスまたは他の「環境」条件(国、言語、アクセスしたデータベース、ユーザアクセス履歴など)に合わせて調整することができる。ネットワーク
要求を開始するクライアントコードは、追加のパラメータまたは情報をネットワーク要求に追加して、投入モジュールがそのような適応を実行できるようにする。追加情報は、直接(例えば、追加されたURLまたは他の要求パラメータとして)または間接的に(例えば、追加要求、データベースへの事前の格納、または他の方法を介して利用可能)追加され得る。
要求を開始するクライアントコードは、追加のパラメータまたは情報をネットワーク要求に追加して、投入モジュールがそのような適応を実行できるようにする。追加情報は、直接(例えば、追加されたURLまたは他の要求パラメータとして)または間接的に(例えば、追加要求、データベースへの事前の格納、または他の方法を介して利用可能)追加され得る。
図12は、本開示のいくつかの実施形態による、ウェブサイトでのサーバインフラストラクチャ要素のインスタンス化を示している。図12の技法は、上記で開示され、本開示を通して説明されるシステムで実施され得る。
図12に示すように、ウェブサイト123は、ウェブサイト123固有コード833をコンテナ1221または仮想マシン1222にコピーすることにより、ウェブサーバ実行インスタンスを通じて提供され得る。いくつかの実施形態では、ウェブサイト123は、別個のオペレーティングシステムプロセス1223によって(例えば、サーバレスコードを介して)提供されてもよい。ウェブサイト123固有コード833は、ウェブサイトで提供され得るカスタマイズされたバックエンド機能に関連して上述したような、フロントエンド126、バックエンド127、およびプラグイン参照コード1226を含み得る。いくつかの実施形態では、フロントエンド126、バックエンド127、およびプラグイン参照コード1226は、コンテナ1221、仮想マシン1222、またはプロセス1223に個別にコピーされ得る。いくつかの実施形態では、汎用ウェブサイトサーバコード824は、ウェブサーバ実行インスタンス826のインスタンス化の一部としてコンテナ1221または仮想マシン1222(後にウェブサイト123固有コード833を含む)にコピーされ得る。
いくつかの実施形態では、サーバレスコードの実装などを介したオンデマンドシステム800の使用は、処理時間およびサーバ利用率を改善する一方で、ユーザの待ち時間を短縮することができる。サーバレスコードの実施形態では、管理する専用サーバはない。代わりに、コード(例えば、フロントエンド126、バックエンド126、およびプラグイン参照コード1226)がクラウドでコードとして提供され、オンデマンドで実行され得る。ユーザがコードの実行に対して課金される範囲で、ユーザはコードの実際の実行に比例して課金され得る(専用のインフラストラクチャコストや、到来する要求を待つ間、所与のサイトに割り当てられたままにする必要のあるサーバに基づくものではない)。あるいは、これにより、オンラインWBSベンダのコストを大幅に削減できると同時に、オンラインWBSベンダがユーザにより良いサービスを提供できる。いくつかの実施形態では、オンデマンドシステム800は、サーバレスコードを処理するためにサポートする1セットのプログラミング言語またはウェブフレームワークを定義し得る。オンデマンドシステム800はまた、WebSocket、ストリーミングまたはチャンク通信、追加プロトコル(例えば、TCPおよびUDPなど)、サービスとしてのメモリの機能(例えば、ステートレスで、副作用のないコード機能のため)、およびネイティブサーバレスオプション(例えば、Go、Rust、Cなど)をサポートし得る。サーバレスコードをオンデマンドで処理できることにより、従来のウェブサイトホスティングシステムの問題(例えば、マシンまたはウェブサイトのインスタンスをロードするための「コールドスタート」を経る)を軽減できる。ウェブサイトまたはページ(実行中のコードを含む)の開始時間は100ミリ秒未満とすることができ、これにより、待ち時間が短縮され、ユーザエクスペリエンスが向上する。対照的に、一部の従来のシステムでは、オーバーヘッドのスケジューリング、インスタンスの起動、プロセスの起動(例えば、コードの実行)、および要求ハンドラーの機能の機能を含む、ウェブサイトまたはページの開始時間が約600ミリ秒~2秒になる。
ウェブサイト実行インスタンス826は、コンテナ1221、仮想マシン1222、ま
たはプロセス1223を介して複数のウェブサイトを提供できる。いくつかの実施形態では、ウェブサーバ実行インスタンス826は、それに専用のまたは利用可能な1セットのコンテナ1221、仮想マシン1222、およびプロセス1223のリソースを有することができる。複数のコンテナ1221、仮想マシン1222、およびプロセス1223は、複数のウェブサイトを提供できる。いくつかの実施形態では、複数のウェブサイトを提供するウェブサイト実行インスタンス826の変形は、複数のウェブサイトを提供し得る単一のコンテナ1221、仮想マシン1222、またはプロセス1223を含むことができる。複数のウェブサイトを提供するコンテナ1221、仮想マシン1222、およびプロセス1223は、複数のウェブサイトのサイト固有コードをコピーして、様々なウェブサイト要求を処理する必要がある。
たはプロセス1223を介して複数のウェブサイトを提供できる。いくつかの実施形態では、ウェブサーバ実行インスタンス826は、それに専用のまたは利用可能な1セットのコンテナ1221、仮想マシン1222、およびプロセス1223のリソースを有することができる。複数のコンテナ1221、仮想マシン1222、およびプロセス1223は、複数のウェブサイトを提供できる。いくつかの実施形態では、複数のウェブサイトを提供するウェブサイト実行インスタンス826の変形は、複数のウェブサイトを提供し得る単一のコンテナ1221、仮想マシン1222、またはプロセス1223を含むことができる。複数のウェブサイトを提供するコンテナ1221、仮想マシン1222、およびプロセス1223は、複数のウェブサイトのサイト固有コードをコピーして、様々なウェブサイト要求を処理する必要がある。
図13は、本開示のいくつかの実施形態による、ホストされたウェブサイトの負荷監視の技法および使用中のインスタンス821の管理の技法を示している。これらの技法は、上記のようにシステムで実行され得る。
図13に示すように、(図11に関連して上述したような)ウェブサーバ実行インスタンスマネージャ950は、負荷監視部1310を監視またはこれと通信して、オンデマンドシステム800により提供されるウェブサイトのいずれかの負荷が所望または予定された負荷よりも大きいか否かを判定する。上述のように、これは現在、以前、または将来の負荷特性に基づいて判定され得る。いくつかの実施形態では、過去のウェブサイト/複数のウェブサイトをホストしているウェブサーバの収集された定期的な負荷に基づく事前知識に基づいて、将来の負荷を予測することができる。過去の負荷には、季節的な傾向およびサイトの使用状況が最もアクティブな他の時期を把握し、ウェブサーバにより提供される特定のウェブサイトまたはウェブサイトのグループを提供するウェブサーバ実行インスタンスをより多く自動的に追加できるように、毎月、毎週、毎日、および毎時のものが含まれ得る。
ウェブサイトの負荷が比較的軽い場合、一部のインスタンスが、特定のウェブサイトの1セットの使用中のインスタンス821から除去され、利用可能なインスタンス822に戻される。いくつかの実施形態では、負荷監視部1310は、オンデマンドシステム800によってホストされるすべてのウェブサイト1311およびそれらの負荷1312を表形式でリストする。いくつかの実施形態では、ウェブサイトの負荷をリストする負荷監視部1310テーブルは、プロキシサーバ840によって管理されるか、アクセス可能な状態テーブル941の一部であり得る。いくつかの他の実施形態では、負荷監視部1310は、プロキシサーバ840内の別個のテーブルであってもよい。他の実施形態では、負荷監視部1310は、オンデマンドシステム800のメモリ820内にあってもよい。
いくつかの実施形態では、使用中のインスタンス821は、オンデマンドシステム800の一部または全部のウェブサイトをホストする別個のインスタンスセットの集まりであってもよい。いくつかの実施形態では、図示のように、ウェブサイト123および2は、オンデマンドシステム800によってホストされるウェブサイトである。様々な実施形態において、ウェブサイト123割り当てインスタンス1320およびウェブサイト2割り当てインスタンス1330は、ウェブサイト123およびウェブサイト2の1セットのウェブサーバ実行インスタンスである。いくつかの実施形態では、ウェブサイト123割り当てインスタンス1320およびウェブサイト2割り当てインスタンス1330は共に、使用中のインスタンス822と見なされる。
負荷監視部1310の負荷テーブルは、ウェブサーバ実行インスタンスマネージャ950によって直接更新されてもよいし、プロキシサーバ840に更新を要求してもよい。いくつかの実施形態では、負荷監視部1310の負荷テーブルは、オンデマンドシステム8
00によりホストされるウェブサイト1311へのアクセス要求の数に基づいてプロキシサーバ840により定期的に更新される。負荷監視部1310の負荷テーブルは、他のウェブサイトの使用統計に基づいて更新され得る。例えば、マルチメディアが多いウェブサイトの場合、使用統計情報には、ユーザにより使用されるデバイスの環境に基づいてビデオおよびオーディオを異なる形式に変換することを含むウェブサイト要求を処理するメモリおよびプロセッササイクルの使用量が含まれ得る。使用中のインスタンス821のウェブサーバ実行インスタンスは、ホストしているウェブサイトの負荷が軽くなると、利用可能なインスタンス822に移動される。同様に、ウェブサイトの負荷が大きくなると、利用可能なインスタンス822のウェブサーバ実行インスタンスは使用中のインスタンス821とマークされ、負荷の大きいウェブサイトのウェブサイト固有コードがこれらのウェブサーバ実行インスタンスに投入される。
00によりホストされるウェブサイト1311へのアクセス要求の数に基づいてプロキシサーバ840により定期的に更新される。負荷監視部1310の負荷テーブルは、他のウェブサイトの使用統計に基づいて更新され得る。例えば、マルチメディアが多いウェブサイトの場合、使用統計情報には、ユーザにより使用されるデバイスの環境に基づいてビデオおよびオーディオを異なる形式に変換することを含むウェブサイト要求を処理するメモリおよびプロセッササイクルの使用量が含まれ得る。使用中のインスタンス821のウェブサーバ実行インスタンスは、ホストしているウェブサイトの負荷が軽くなると、利用可能なインスタンス822に移動される。同様に、ウェブサイトの負荷が大きくなると、利用可能なインスタンス822のウェブサーバ実行インスタンスは使用中のインスタンス821とマークされ、負荷の大きいウェブサイトのウェブサイト固有コードがこれらのウェブサーバ実行インスタンスに投入される。
いくつかの実施形態では、ウェブサイト123の負荷が軽いことをプロキシサーバ840が観測したことに基づいて、オンデマンドシステム800は、ウェブサーバ実行インスタンス826をウェブサイト123割り当てインスタンス1320セットから利用可能なインスタンス822セットに移動させてもよい。いくつかの実施形態では、ウェブサーバ実行インスタンス1323は利用可能なインスタンス822に移動される。いくつかの実施形態では、複数のウェブサーバ実行インスタンスが同時に利用可能なインスタンス822に移動される。プロキシサーバ840は、ウェブサイト2の負荷が大きいことを負荷監視部1310において観測すると、ウェブサーバ実行インスタンス1127を利用可能なインスタンス822セットからウェブサイト2割り当てインスタンス1330セットに移動し得る。ステップ1342の一部として、ウェブサイト2は、ウェブサイト2割り当てインスタンス1330に移動する前に、ウェブサーバ実行インスタンスM 1127に投入されるサイト固有またはページ固有コードを有し得る。当然のことながら、ステップ1341とステップ642とは独立であり、一緒にまたは特定の順序で発生する必要はない。
図14は、本開示のいくつかの実施形態による、ホスティングに利用可能なウェブサーバ実行インスタンスの監視を示している。図14に示すように、ウェブサーバ実行インスタンスマネージャ950は、利用可能なインスタンス822の数を監視する。ウェブサーバ実行インスタンスマネージャ950は、上述のように、1セットの利用可能なインスタンス822のセット内のウェブサーバ実行インスタンスの数が閾値未満である場合、新しいインスタンスをスピンアップし、1セットの利用可能なインスタンス822のプールに追加することができる。ウェブサーバ実行インスタンスマネージャ950は、ウェブサーバ実行インスタンスの数が閾値よりも大きい場合、1セットの利用可能なインスタンス822内のインスタンスを逆にシャットダウンし得る。実行インスタンスをスピンアップおよびシャットダウンするこれらの技法は、上述のように、特定のウェブサイトまたはページに関する現在の、以前の、または予想される将来の需要を考慮し得る。
いくつかの実施形態では、ウェブサーバ実行インスタンスマネージャ950は、新しいインスタンスをスピンアップする前に一定時間待機して、状態テーブル841を通じて識別された非アクティブなインスタンスがプールに再び追加されないことを確実にし得る。同様に、いくつかの実施形態では、ウェブサーバ実行インスタンスマネージャ950は、利用可能なインスタンスをシャットダウンする前に一定時間待機して、新しいウェブサイト要求を処理するためにウェブサイト固有コードをインスタンスに投入する必要がないことを確実にしてもよい。インスタンスのシャットダウンおよびスピンアップは時間のかかるプロセスである場合があり、ウェブサイト実行インスタンスマネージャ150は、利用可能なインスタンスの数が閾値数から逸脱していることを発見した後に待機することで、頻繁に行われることを回避する。
いくつかの実施形態において、ウェブサーバ実行インスタンスマネージャ950は、利用可能なインスタンス822セット内のインスタンスの現在の数が指定された数または割合だけ閾値と異なる場合、ウェブサーバ実行インスタンスをスピンアップおよびシャットダウンする。これにより、利用可能なインスタンス822の数に関してある範囲の値をいつでも存在させることができる。他の実施形態では、ウェブサーバ実行インスタンスマネージャ850は、閾値からの逸脱に即座に反応して、インスタンスをスピンアップおよびシャットダウンすることができる。
図15は、本開示のいくつかの実施形態による、例示的なウェブサイトリアルタイムテストシステムを示している。図15に示すように、ウェブサイトリアルタイムテストシステム1500は、プロセッサ260と、メモリ820と、ウェブサイトで使用されるデータを格納するためのサイトエリアデータベース124と、アクセスされるウェブサイトに関連するデータへのアクセスを提供するデプロイ環境1510と、を備える。いくつかの実施形態では、ウェブサイトリアルタイムテストシステム1500はまた、テスト目的でアクセスされるウェブサイトに関連するデータへのアクセスを提供するテスト環境1520も備え得る。テスト/デプロイという用語には、開発/実行時、ステージング/プロダクション、およびテスト/ライブなどの代替的な用語が使用されてもよい。
いくつかの実施形態では、オンデマンドシステム800は、ウェブサイトリアルタイムテストシステム1500に全体として含まれるサブシステムであってもよい。いくつかの実施形態では、ウェブサイトリアルタイムテストシステム1500は、オンデマンドシステム800から部分的に構成されてもよいし、オンデマンドシステム800を含んでもよい。
デプロイ環境1510は、オンデマンドシステム800のウェブサーバ実行インスタンスで実行される1セットのソフトウェアコンポーネントであり得る。
テスト環境1520は、オンデマンドシステム800のウェブサーバ実行インスタンスで実行される1セットのソフトウェアコンポーネントである。いくつかの実施形態では、ウェブサイトにアクセスするために使用されるデバイスの種類に基づいて、テスト環境1520が生成される。例えば、ウェブ閲覧デバイス140上のウェブブラウザ141を介してアクセスされるウェブサイト123は、ウェブ閲覧デバイス140がデスクトップコンピュータまたは携帯電話である場合、外観およびレイアウトが異なる場合があるテスト環境1520を作り出し得る。いくつかの他の実施形態では、テスト環境1520は、どのユーザがウェブサイトにアクセスしているかに基づいて生成され得る。例えば、ウェブサイト123へのアクセスを要求する開発者/設計者1540は、テスト環境1520を作成することになり得る。いくつかの実施形態では、テスト環境1520はユーザ間で共有されてもよい。テスト環境1520は、ユーザごとに異なり得る。いくつかの実施形態では、テスト環境1520は、サイトエリアデータベース124に格納された複数のウェブサイトにわたって共有され得る。いくつかの実施形態では、テスト環境1520のインスタンスは常に利用可能であり、開発者/設計者1540は、所与のウェブサイトにアクセスするのにテスト環境1520を介するかデプロイ環境1510を介するかを選択することができる。
エンドユーザ1530は、ネットワーク160を介してデプロイ環境1510におけるウェブサイトおよびそのデータにアクセスできる。いくつかの実施形態では、エンドユーザ1530は、上記の実施形態と整合して、ウェブサイト閲覧デバイス130上のウェブブラウザ131を介してウェブサイト123にアクセスし得る。
開発者/設計者1540は、ネットワーク160を介してテスト環境1520において
ウェブサイトおよびそのデータにアクセスできる。開発者/設計者1540は、ウェブサイト開発デバイス140上のウェブブラウザ141を介してウェブサイト123にアクセスできる。いくつかの実施形態では、開発者/設計者1540は、ウェブ閲覧デバイス130上のウェブブラウザ131を使用することにより、デプロイ環境1510内のウェブサイト123にアクセスすることができる。ウェブ閲覧デバイス130と開発デバイス140とは同じデバイスであってもよいことに留意されたい。
ウェブサイトおよびそのデータにアクセスできる。開発者/設計者1540は、ウェブサイト開発デバイス140上のウェブブラウザ141を介してウェブサイト123にアクセスできる。いくつかの実施形態では、開発者/設計者1540は、ウェブ閲覧デバイス130上のウェブブラウザ131を使用することにより、デプロイ環境1510内のウェブサイト123にアクセスすることができる。ウェブ閲覧デバイス130と開発デバイス140とは同じデバイスであってもよいことに留意されたい。
エンドユーザ1530および開発者/設計者1540は、ウェブサイト123にアクセスする同一ユーザの異なる役割であってもよい。いくつかの実施形態では、ユーザは、異なるデバイスを使用してウェブサイト123にアクセスすることにより役割を変更することができる。例えば、WBSベンダスタッフデバイス150またはウェブサイト開発デバイス140を使用してウェブサイト123にアクセスするユーザは、開発者/設計者1540と見なされ得る。ウェブサイト閲覧デバイス130を使用してウェブサイト123にアクセスするユーザは、エンドユーザ1530と見なされ得る。ウェブサイトは、ユーザがエンドユーザ1530であるか開発者/設計者1540であるかに基づいて、それぞれデプロイ環境1510またはテスト環境1520を使用してアクセスされ得る。また、ウェブサイトは、要求がウェブサイト閲覧デバイス130からのものかウェブサイト開発デバイス140からのものかに基づいて、デプロイ環境1510またはテスト環境1520を使用してアクセスされ得る。いくつかの実施形態では、ウェブサイトは、ユーザとデバイス種別との組み合わせに基づいて、デプロイ環境1510またはテスト環境1520を使用してアクセスされ得る。
図16aは、本開示のいくつかの実施形態による、データ要素にアクセスするための開発環境1510の概略図を示している。図16aに示すように、デプロイ環境1510は、ライブデータ1610へのアクセスを支援するようにプロセッサ260に要求してもよい。デプロイ環境1510は、破線で示されているテストデータ1620にアクセスできない。図16bは、本開示のいくつかの実施形態による、データ要素にアクセスするためのテスト環境1520の概略図を示している。図16bに示すように、テスト環境1520は、ライブデータ1610およびテストデータ1620へのアクセスを支援するようにプロセッサ260に要求することができる。テスト環境1520を使用してウェブサイト123にアクセスする開発者/設計者1540は、ウェブサイト123のインデックス可能なウェブページ125に関連付けられたデータ要素を要求できる。テスト環境1520は、ユーザからのデータ要素に関する要求を受信するように構成でき、テストデータ1620に要求を転送できる。いくつかの実施形態では、テストデータ1620は、要求されたデータ要素がテストデータ1620に存在するか否かを判定してもよいし、ライブデータ1610に要求を転送してもよい。いくつかの実施形態では、テスト環境1520自体が、特定のデータ要素に関してライブデータ1610を要求かテストデータ1620を要求するかを判定し得る。いくつかの実施形態では、テスト環境1520は、ライブデータ1610およびテストデータ1620をメモリ820にコピーした後にライブデータ1610およびテストデータ1620にアクセスすることができる。
図17は、本開示のいくつかの実施形態による、テスト環境1520におけるライブデータおよびテストデータへのウェブサイトアクセスの図である。図17に示すように、ウェブサイト123のインデックス可能なウェブページ125は、ウェブ開発デバイス140上のウェブブラウザ141を使用してアクセスされる。インデックス可能なウェブページ125および関連するデータ要素は、テスト環境1520を介してアクセスされる。
インデックス可能なウェブページ123は、インデックス可能なウェブページ125に関連付けられたデータ要素へのアクセスの一部として、ライブデータ1610とテストデータ1620との両方にアクセスできる。いくつかの実施形態では、データ要素にアクセ
スするすべての要求は、最初にテストデータ1620に送信され得る。テストデータ1620は、ライブデータ1610に要求を転送する前に、テストデータ1620自体で処理され得るデータ要素アクセス要求を除外することができる。
スするすべての要求は、最初にテストデータ1620に送信され得る。テストデータ1620は、ライブデータ1610に要求を転送する前に、テストデータ1620自体で処理され得るデータ要素アクセス要求を除外することができる。
図18は、本開示のいくつかの実施形態による、ウェブサイトをテストするためのテスト環境1520で使用されるテストデータの生成を示している。図18に示すように、ライブデータ1610はテストデータ1620の一部を形成する。いくつかの実施形態では、挿入済みとしてマークされたデータ1730および削除済みとしてマークされたデータ1740を追加する順序は異なっていてもよい。挿入済みとしてマークされたデータ1730および削除済みとしてマークされたデータ1740は、テストデータ1620にあるデータを追加した後で削除済みとしてマークされたこのデータを削除済みとしてマークされたデータ1740において削除するのを避けるために並行してトラバーサルされ得る。
挿入済みとしてマークされたデータ1730および削除済みとしてマークされたデータ1740は、サイトエリアデータベース124に保持され得る。いくつかの実施形態では、テスト環境1520でウェブサイト123にアクセスするセッションがアクティブになるまで、挿入済みとしてマークされたデータ1730および削除済みとしてマークされたデータ1740がメモリ920に置かれ得る。セッションが非アクティブになると、挿入済みとしてマークされたデータ1730および削除済みとしてマークされたデータ1740は、サイトエリアデータベース124に保持され得る。例えば、開発者/設計者1540は、挿入済みとしてマークされたデータ1730および削除済みとしてマークされたデータ1740がサイトエリアデータベース124に保持されるように明示的に要求できる。いくつかの実施形態では、挿入済みとしてマークされたデータ1730および削除済みとしてマークされたデータ1740は、サイトエリアデータベース124内の同じ場所を共有してもよい。挿入済みとしてマークされたデータ1730および削除済みとしてマークされたデータ1740は、読み出し要求の数に基づいて保持され得る。挿入済みとしてマークされたデータ1730内のデータ要素は、サイトエリアデータベース124に選択的に保持されてもよい。データ要素は、データ要素の読み出しが要求された回数、またはデータ要素のうちのあるデータ要素が変更されなかった時間、またはデータがアクセスされたセッションの数など、追加の基準に基づいて選択的に保持され得る。
図19は、本開示のいくつかの実施形態による、デプロイ環境でウェブサイトにアクセスする方法1900を示すフローチャートである。
ステップ1910に示すように、デプロイ環境1510でウェブサイトにアクセスするときに更新および追加されるデータ要素は、サイトエリアデータベース124のライブデータ1610に格納される。
ステップ1920において、デプロイ環境1510でアクセスされるウェブサイトのインデックス可能なウェブページに関連付けられたサイトエリアデータベース124に格納されたライブデータ1610は、ウェブサイトリアルタイムテストシステム1500によって、ユーザにより要求されたウェブページを提供することの一部としてアクセスされる。
ステップ1930において、ステップ1920でアクセスされたデータ要素は、エンドユーザ1530によって使用されるウェブ閲覧デバイス130のウェブブラウザ131でウェブページをレンダリングするために関連付けられているインデックス可能なウェブページに適用される。
図20は、本開示のいくつかの実施形態による、テスト環境でウェブサイトにアクセス
する方法2000を示すフローチャートである。
する方法2000を示すフローチャートである。
ステップ2010において、ウェブサイトリアルタイムテストシステム1500は、共通データベース(例えば、サイトエリアデータベース124)に格納されたウェブサイト(例えば、ウェブサイト123)でテストを実行する要求を受信し得る。ステップ2020において、ウェブサイトリアルタイムテストシステム1500は、テスト環境1520を使用してウェブサイトをテストするプロセスの一部として行われたデータ要求を処理する。例えば、ウェブサイト123は、ウェブサイト開発デバイス140のウェブブラウザ141を使用してウェブサイト123にアクセスすることにより、開発者/設計者1540によってテストされてもよい。例えば、開発者/設計者1540は、URLを入力して、ウェブサイト123のインデックス可能なウェブページ125を要求できる。さらに、いくつかの実施形態では、URLはアプリケーションによって指定されてもよい。要求は、フロントエンド126への要求と、ウェブサイト123のインデックス可能なウェブページ125に関連付けられたデータグループ210のデータ要素への要求と、の両方を含む。データの読み出し要求は、ウェブページにアクセスするプロセスの一部として行われ得る。
図20に示すように、ステップ2030において、ウェブサイトリアルタイムテストシステム1500は、テストが完了したか否かを確認する。いくつかの実施形態では、ウェブサイトが一定期間テスト環境1520を介してアクセスされる場合、ウェブサイトのテストは完了したと見なされる。テストは、一定数のデータ要求後に完了したと見なされ得る。テストはまた、ウェブサイト開発デバイス140のウェブブラウザ141を介してウェブサイトにアクセスする開発者/設計者1540が、ウェブサイトへのアクセスに使用したブラウザタブまたはウィンドウを閉じると、完了したと見なされ得る。テストはまた、開発者/設計者1540がウェブサイトリアルタイムテストシステム1500から明示的にテストの完了を要求した場合、完了したと見なされ得る。ステップ2030に対する答えが「いいえ」である場合、方法2000はステップ2010に戻り、次のデータ要求を受信する準備をし得る。ステップ2030に対する答えが「はい」である場合、方法2000はステップ2040に進むことができる。ステップ2040において、方法2000は、データ要素に加えられ、テストデータ1620に保存された変更を、ライブデータ1610の対応するデータ要素に適用することができる。開発者/設計者1540は、例えば、テストデータ1620に組み込まれたデータ変更をドロップすることを要求し得るため、ステップ2040はオプションであってもよい。
ステップ2050において、テスト環境1520でウェブサイト123のテスト中に行われたデータ要素への更新に関連付けられたすべてのマーカが削除されてもよい。
図21は、本開示のいくつかの実施形態による、テスト環境1520でデータ要求を処理するための方法2100を示すフローチャートである。図21の方法2100は、開発者/設計者1540によってアクセスされているウェブサイトに関連付けられたデータ要素に関して到来する要求を処理するための5つの例示的な経路のうちの1つを特定する。
図21に示すように、ステップ2110において、ウェブサイトリアルタイムテストシステム1500は、テスト環境1520でデータ要求を受信する。データ要求は、テスト環境1520でテストするためのウェブサイトへのアクセスの一部である。例えば、ウェブサイト開発デバイス140を介してウェブサイト123にアクセスする開発者/設計者1540は、ウェブサイト123に関連付けられたデータグループ210のデータ要素211に関する要求をもたらし得る。
ステップ2120において、ウェブサイトリアルタイムテストシステム1500は、テ
ストされているウェブサイトに関連付けられたデータ要素にアクセスする要求の種類を判定する。この判定により、様々な種類の要求が処理される。データ要求は、開発者/設計者1540がURLを入力してインデックス可能なウェブページを要求した場合に、開発者/設計者1540によりテストされているウェブサイトに関連付けられたデータ要素にアクセスする読み出し要求であり得る。いくつかの実施形態では、データ要求は、データ要素を追加するための書き込み要求であり得る。例えば、ウェブサイト123をテストする開発者/設計者1540は、データグループ210に追加する新しいデータ要素の作成を要求するインデックス可能なウェブページ125上でフォームを送信できる。データ要求は、開発者/設計者1540によってテストされているウェブサイトに関連付けられたデータ要素のコンテンツを変更する更新要求であり得る。データ要求は、開発者/設計者1540によってテストされているウェブサイトに関連付けられたデータ要素を除去する削除要求であり得る。
ストされているウェブサイトに関連付けられたデータ要素にアクセスする要求の種類を判定する。この判定により、様々な種類の要求が処理される。データ要求は、開発者/設計者1540がURLを入力してインデックス可能なウェブページを要求した場合に、開発者/設計者1540によりテストされているウェブサイトに関連付けられたデータ要素にアクセスする読み出し要求であり得る。いくつかの実施形態では、データ要求は、データ要素を追加するための書き込み要求であり得る。例えば、ウェブサイト123をテストする開発者/設計者1540は、データグループ210に追加する新しいデータ要素の作成を要求するインデックス可能なウェブページ125上でフォームを送信できる。データ要求は、開発者/設計者1540によってテストされているウェブサイトに関連付けられたデータ要素のコンテンツを変更する更新要求であり得る。データ要求は、開発者/設計者1540によってテストされているウェブサイトに関連付けられたデータ要素を除去する削除要求であり得る。
ステップ2121では、データ要求が、開発者/設計者1540によってテストされているウェブサイトに関連付けられたデータ要素を検索すること、またはそのような検索動作の結果を閲覧することであるとウェブサイトリアルタイムテストシステム1500によってステップ2120で判定されている。
ステップ2122では、データ要求が、開発者/設計者1540によってテストされているウェブサイトに関連付けられたデータ要素を読み出すことであるとウェブサイトリアルタイムテストシステム1500によってステップ2120で判定されている。
ステップ2123では、データ要求が、開発者/設計者1540によってテストされているウェブサイトに関連付けられたデータ要素を追加することであるとウェブサイトリアルタイムテストシステム1500によってステップ2120で判定されている。
ステップ2124では、データ要求が、開発者/設計者1540によってテストされているウェブサイトに関連付けられたデータ要素を更新することであるとウェブサイトリアルタイムテストシステム1500によってステップ2120で判定されている。
ステップ2125では、データ要求が、開発者/設計者1540によってテストされているウェブサイトに関連付けられたデータ要素を削除することであるとウェブサイトリアルタイムテストシステム1500によってステップ2120で判定されている。
図22は、本開示のいくつかの実施形態による、テスト環境で読み出し要求を処理するための方法2200を示すフローチャートである。図22の方法2200は、3つの経路を特定して、データ要求に応答する必要があるか否か、応答する必要がある場合、テストデータ1620とライブデータ1610とのいずれのデータ要素を使用するかを判定する。
図22に示すように、ステップ2122において、受信されたデータ要求は、方法2100において、サイトエリアデータベース124およびメモリ820内のデータ要素に関する読み出し要求であると判定されている。
ステップ2210において、ウェブサイトリアルタイムテストシステム1500は、要求されたデータ要素をテストデータ1620においてルックアップし、一致が見つかった場合に、削除済みとマークされているか否かを確認する。ステップ2210の答えが「はい」である場合、方法2200はステップ2120に進み、方法2200が完了したと見なすことができる。ステップ2において、「データ要素が見つかりません」というメッセージは返されない。例えば、ウェブサイト123のインデックス可能なウェブページ12
5にアクセスする開発者/設計者1540は、テストデータ1620の削除済みとしてマークされたデータ1740のデータ要素1741に関する要求を送信して、「データ要素が見つかりません」というメッセージを返すことができる。
5にアクセスする開発者/設計者1540は、テストデータ1620の削除済みとしてマークされたデータ1740のデータ要素1741に関する要求を送信して、「データ要素が見つかりません」というメッセージを返すことができる。
ステップ2210の答えが「いいえ」である場合、方法2100はステップ2130に進むことができる。図22に示すように、ステップ2230において、ウェブサイトリアルタイムテストシステム1500は、テストデータ1620の挿入済みとしてマークされたデータ1730において、要求されたデータ要素をルックアップする。
ステップ2230の答えが「はい」である場合、方法2200はステップ2240に進むことができる。ステップ2240において、要求されたデータ要素がテストデータ1620で見つかり、返される。要求されたデータ要素は、以前に新しいデータ要素として追加されたため、テストデータ1620の挿入済みとしてマークされたデータ1730にあり得る。さらに、要求されたデータ要素は、以前にウェブサイトのテスト中に更新されたため、挿入済みとしてマークされたデータに1730にあり得る。例えば、テスト環境1520で連絡先2 1760のデータ要素にアクセスする開発者/設計者1540の要求により、方法2200がステップ2240を実行した後、テストデータ1620の挿入済みとしてマークされたデータ1730のデータ要素1732が返される。デプロイ環境1510で同じデータ要素を要求すると、データ要素1752が返され得る。
ステップ2230の答えが「いいえ」である場合、方法2200はステップ2250に進むことができる。ステップ2250において、要求されたデータ要素がライブデータ1610から返される。
図23aは、本開示のいくつかの実施形態による、テスト環境でデータ要素を更新するための方法2300を示すフローチャートである。図23aの方法2300は、ウェブサイトのテスト中に要求された更新されたデータ要素を格納する場所を定義する。
図23aに示すように、ステップ2124において、受信されたデータ要求が、方法2100において、ライブデータ1610またはウェブサイトのテスト中にテストデータ1620の挿入済みとしてマークされたデータ1730に存在するデータ要素を更新する要求であると判定されている。
ステップ2310において、ウェブサイトリアルタイムテストシステム1500は、テストデータ1620の挿入済みとしてマークされたデータ1730を最初にチェックインすることにより、更新が要求されているデータ要素の場所を判定する。
ステップ2310に対する答えが「はい」である場合、方法2200はステップ2320に進む。ステップ2320において、更新が要求されているものに対応するデータ要素が更新される。
ステップ2310に対する答えが「いいえ」である場合、方法2200はステップ2330に進み、更新が要求されたデータ要素は過去に更新されておらず、ライブデータ1610のみに存在することを指示する。テスト環境1520でのデータへの将来のアクセスを避けるために、ライブデータ1610のデータ要素は削除済みとしてマークされたデータ1740にコピーされる。
ステップ2340において、ウェブサイトリアルタイムテストシステム1500は、更新されたデータ要素をテストデータ1620に挿入する。いくつかの実施形態では、データ要素を追加することは、データベースエントリを追加し、テスト環境を介して追加され
たと追加の列にマークを付けることを含む。テスト環境1620からテストデータ1620の挿入済みとしてマークされたデータ1730に挿入されたデータ要素には、デプロイ環境1610での要求ではアクセスできない。例えば、開発者/設計者1540によるウェブサイト123を介してのデータ要素1752を更新する要求により、データ要素1732がテストデータ1620の挿入済みとしてマークされたデータ1730に挿入される。
たと追加の列にマークを付けることを含む。テスト環境1620からテストデータ1620の挿入済みとしてマークされたデータ1730に挿入されたデータ要素には、デプロイ環境1610での要求ではアクセスできない。例えば、開発者/設計者1540によるウェブサイト123を介してのデータ要素1752を更新する要求により、データ要素1732がテストデータ1620の挿入済みとしてマークされたデータ1730に挿入される。
図23bは、本開示のいくつかの実施形態による、デプロイ環境1510でデータ要素を更新するための別の方法2300を示すフローチャートである。本方法は、テスト環境1520を使用してウェブサイトをテストする開発者/設計者1540が確実にライブデータ1610をリアルタイムで利用できるようにする。
ステップ2350において、デプロイ環境1510でデータ要素を更新する要求が受信される。
ステップ2360において、ライブデータ1610内のデータ要素が要求に従って更新される。
ステップ2370において、ステップ2360でライブデータ1610において更新されたデータ要素を識別するためのルックアップ要求が、削除済みとしてマークされたデータ1740に対して行われる。削除済みとしてマークされたデータ1740で見つかった対応するデータ要素は、テスト環境1520で更新または削除されている。
ステップ2370の答えが「いいえ」である場合、方法2300はステップ2380に進み、そこでタスクは完了したと見なされ、方法2300は終了する。
ステップ2370での答えが「はい」である場合、方法2300はステップ2390に進む。ステップ2390において、デプロイ環境1510を介して更新するように要求されたデータ要素が、削除済みとしてマークされたデータ1740において更新される。これにより、以下のプロセス2500で説明するように、ライブデータ1610で更新されるデータ要素がクエリ結果に含まれなくなる。
図23cは、本開示のいくつかの実施形態による、テスト環境でデータ要素を追加するための別の方法2300を示すフローチャートである。図23cの方法2300は、ウェブサイトのテスト中に追加が要求された新しいデータを格納する場所を定義する。
図23cに示すように、ステップ2123において、受信されたデータ要求が、方法2100において、ウェブサイトのテスト中にライブデータ1610に存在していない新しいデータ要素をテストデータ1620に追加する要求であると判定されている。
ステップ2392において、ウェブサイトリアルタイムテストシステム1500は、データ要素をテストデータ1620に挿入する。いくつかの実施形態では、データを追加することは、データベースエントリを追加し、テスト環境を介して追加されたと追加の列にマークを付けることを含む。テスト環境1620からテストデータ1620の挿入済みとしてマークされたデータ1730に挿入されたデータ要素には、デプロイ環境1610での要求ではアクセスできない。例えば、開発者/設計者1540がウェブサイト123を介してデータ要素1731を追加するよう要求すると、データ要素1731がテストデータ1620の挿入済みとしてマークされたデータ1730に挿入され得る。
図24は、本開示のいくつかの実施形態による、テスト環境からデータ要素を削除する
ための方法2400を示すフローチャートである。図24に示すように、削除が要求されたデータ要素は、ライブデータ1610に提示されてもよいし、テスト環境を介して以前に追加されていてもよく、挿入済みとしてマークされたデータ1730に存在する。
ための方法2400を示すフローチャートである。図24に示すように、削除が要求されたデータ要素は、ライブデータ1610に提示されてもよいし、テスト環境を介して以前に追加されていてもよく、挿入済みとしてマークされたデータ1730に存在する。
図24に示すように、ステップ2125において、受信されたデータ要求は、方法2100において、サイトエリアデータベース124またはメモリ820内のデータ要素に関する削除要求であると判定されている。
ステップ2410において、ウェブサイトリアルタイムテストシステム1500は、削除するよう要求されたデータ要素を、テストデータ1620の削除済みとしてマークされたデータ1740に挿入することができる。テスト環境で追加されたか更新されたかを問わずあらゆるデータ要素は、テストされるウェブサイトに関連付けられたデータ要素に関する要求が行われたときに削除済みとしてマークされたデータ1740のすべてのデータ要素がスキップされ得るため、削除済みとしてマークされたデータ1740に追加され得る。
ステップ2420において、削除が要求されたデータ要素のルックアップが、テストデータ1620の挿入済みとしてマークされたデータ1730で検索される。テストデータ1620にそのようなデータ要素が見つからない場合、プロセス2300は完了したと見なされる。例えば、ウェブブラウザ141でウェブサイト123をテストする開発者/設計者1540は、データ要素1741を削除する要求を行い、これにより、データ要素1741が削除済みとしてマークされたデータ1740に挿入される。データ要素1741が挿入済みとしてマークされたデータ1730に存在しないことは、データを除去する必要がないことを示し、プロセス2400は完了したと見なされる。ステップ2420での答えが「いいえ」である場合、方法2400は、挿入済みとしてマークされたデータ1730において、削除が要求されたデータ要素1730を見つけておらず、方法2400はステップ2430に進み、そこでタスクは完了し、方法2400は終了する。
ステップ2420の答えが「はい」である場合、方法2400は、挿入済みとしてマークされたデータ1730で、削除が要求されたデータ要素を見つけている。ステップ2440において、テストデータ1620のデータ要素が挿入済みとしてマークされたデータ1730から除去される。
図25は、本開示のいくつかの実施形態による、テストデータを問い合わせた結果を生成するためのオーバーレイプロセスを示している。図25に示すように、方法2500は、ライブデータ1610、テストデータ1620の挿入済みとしてマークされたデータ1730および削除済みとしてマークされたデータ1740に並行してアクセスする4ステップのプロセスである。
図25に示すように、ステップ1において、クエリに整合するデータ要素は、ライブデータ1610、挿入済みとしてマークされたデータ1730、および削除済みとしてマークされたデータ1740からアクセスされる。いくつかの実施形態では、データ要素は、ライブデータ1610、ならびにテストデータ1620の挿入済みとしてマークされたデータ1730および削除済みとしてマークされたデータ1740に対してサイトエリアデータベース124でクエリを実行することによりアクセスされる。いくつかの実施形態では、クエリの結果は、1つの融合テーブル2510として構成されてもよい。
データ要素は、クエリで要求されたとおりに並べ替えされる。いくつかの実施形態では、データ要素は、2510の列「B」によって降順で並べ替えされる。いくつかの実施形態では、順序は複数の列を含み得る。いくつかの実施形態では、要求された順序がない場
合、ランダムな列が選択され、昇順または降順で並べ替えされる。いくつかの実施形態では、並べ替えに使用される列に主キーが追加される。
合、ランダムな列が選択され、昇順または降順で並べ替えされる。いくつかの実施形態では、並べ替えに使用される列に主キーが追加される。
ステップ2において、システムは、ライブデータ1610、挿入済みとしてマークされたデータ1730、および削除済みとしてマークされたデータ1740のデータ要素を同時にトラバーサルして、テストデータ1620に含めるデータ要素を選択する。
テスト1720に含めるデータ要素を判定するために、ライブデータ1610、挿入済みとしてマークされたデータ1730、および削除済みとしてマークされたデータ1740の最初の要素にポインタを設定する。いくつかの実施形態では、ポインタは、列「B」に基づいて最も若いデータ要素に配置される。ライブデータ1610、挿入済みとしてマークされたデータ1730、および削除済みとしてマークされたデータ1740の現在の最も若いレコードを比較して、最も若いデータ要素を識別する。発見され得る最も若いものは複数の場所に存在する場合がある。例えば、データ要素2520および2530は、ライブデータ1610および削除済みとしてマークされたデータ1740の最も若いデータ要素であり、同じコンテンツを有する。
最も若いデータ要素が識別されると、次の規則に基づいて、データ要素をテストデータ1620に含めるか否かが判定される。データ要素がライブデータ1610と削除済みとしてマークされたデータ1740との両方に存在する場合、データ要素はテストデータ1620に含めることからスキップされる。例えば、データ要素2520および2530は同じコンテンツを有し、ライブデータ1610および削除済みとしてマークされたデータ1740に存在し、以前にウェブサイトのテスト中にテスト環境1520でデータ要素の削除が要求されたことを指示する。また更新されていてもよく、データ要素2560が結果として得られた更新された要素であった。
データ要素がライブデータ1610にのみ存在する場合、データ要素はテストデータ1620に含まれる。例えば、データ要素2540はライブデータ1610にのみ存在し、データ要素2540に関連付けられているウェブサイトをテストするときにテスト環境で変更または削除されなかったことを指示する。
データ要素が挿入済みとしてマークされたデータ1730にのみ存在する場合、テストデータ1620に含まれる。例えば、データ要素2540は、削除済みとしてマークされたデータ1740にのみ存在し、新しいデータ要素として挿入されたか、ウェブサイトのテスト中にデータ要素2520の更新の一部として挿入されたことを指示する。
データ要素が含められる、またはスキップされると、最も若いデータ要素を持つデータ要素のソースのみが、次のデータ要素に移動するためのポインタを持つ。いくつかの実施形態において、ライブデータ1610および削除済みとしてマークされたデータ1740のポインタは、トラバーサルの最初の反復後に次のレコードに移動される。
データ要素の3つのソースすべての最後のデータ要素に到達すると、方法2500は終了し、テストデータ1620が取得される。融合テーブル2560は、上述のステップ2の各反復で識別された最も若いデータ要素を示している。最も若いデータ要素を持つソースのみが記入されて表示され、残りは空のままになる。例えば、ステップ2の最初の反復では、同じコンテンツを持つ最も若いデータ要素2520および2530がそれぞれのソース、すなわちライブデータ1610および削除済みとしてマークされたデータ1740の一部として表示され、削除済みとしてマークされたデータ1740は空になり、最も若いデータ要素を持っていなかったことを指示する。同様に、最後の反復では、挿入済みとしてマークされたデータ1730のみが、融合テーブル2560の最後の行に示されてい
る最も若いデータ要素2550を持つ。
る最も若いデータ要素2550を持つ。
図26は、本開示のいくつかの実施形態による、ウェブサイトのプレビュー中にデータベースを編集するための方法2600のステップを示すフローチャートを示している。方法2600は、図1、図2、図15など、本開示を通して説明されるシステム環境で実施され得る。
図26に示すように、ステップ2602は、(例えば、ウェブサイト構築システムのユーザから)データ要素の1つまたは複数のグループを受信することを含み得る。データ要素は、上述したように、テキスト、画像、ビデオ、広告、データベース出力表示など、ウェブサイトに組み込まれ得る様々な異なる種類のコンテンツまたはコンテンツのレコードを含み得る。いくつかの実施形態では、データ要素は、1セットのデータオブジェクト(例えば、テキストの2つのインスタンスおよび1つの画像)をさらに含み得る。各グループは、1つまたは複数のデータ要素を有し得る。よって、グループは、関連する1セットの1つまたは複数の要素を定義できる。例えば、第1のウェブサイトまたはページ(例えば、ウェブページの識別子)がテキストのみを含むグループに関連付けられてもよく、第2のウェブサイトまたはページがデータ要素(それぞれが1つのテキストおよび3つの画像を含む)を含むグループに関連付けられてもよく、第3のウェブサイトまたはページがテキストおよびビデオなどのデータ要素を含むグループに関連付けられてもよい。上述したように、ユーザは、ウェブサイト編集インターフェースを介して、ウェブサイトの個々のウェブページまたは所与の仮想ページテンプレートに表示されるべき、または関連付けられるべき、データ要素のグループを識別することができる。
データグループは、いくつかの実施形態では、ウェブサイトの複数のページで使用および再利用され得るサイトレベルのエンティティとすることもできるし、特定のウェブサイト所有者により使用および再利用され得る所有者レベルのエンティティとすることもできる。さらに、データグループはまた、システムレベルのエンティティ(例えば、郵便番号、地理的領域の説明などのデータベース)またはページレベルのエンティティとすることもできる。
方法2600はまた、上記の実施形態と整合する、サイトエリアデータベース124に1つまたは複数のデータ要素のグループを格納するステップ2604を含み得る。そのようなデータベースの例は(例えば、図1、図2、図15などに関連して)上で説明されている。データベースは、各グループを維持するように、またグループとウェブサイトもしくはページまたは仮想ページテンプレートとの間の関連付けを維持するように、また他のコンテンツおよび情報を格納するように構成され得る。以下でさらに説明するように、ユーザがプレビューモード中に仮想ウェブページを編集する場合、そのような編集はリアルタイムでデータベースに対する編集に変換されるため、各ウェブページの最新のデータベースが維持される。
加えて、方法2600は、1つまたは複数の仮想ウェブページを生成するステップ2606を含み得る。仮想ウェブページのそれぞれは、実際のウェブサイトまたはその更新された部分が稼働する(すなわち、インターネットを通じて他のユーザに閲覧可能となる)前に(開発中の)プレビューモードで表示され得る(1つまたは複数のオブジェクトから構成される)データ要素を表し得る。その後、ライブモードで仮想ウェブページコレクションを公開するために、ユーザは「公開」、「投稿」などのタイトルのオプションを選択でき、これにより、(公開は通常、単一ページではなくサイトレベルで行われるため)ウェブサイトがインターネットを通じて閲覧可能になる。公開されると、仮想ページ(すなわち、ウェブページテンプレート2704から導出されたインスタンス)は、動的に生成されているにもかかわらず、普通の(実際の)ページと同様の挙動をし得る。いくつかの
実施形態では、実際のウェブページのそれぞれは、データベースを更新する機能を備えて設計されていないが、仮想ウェブページはその機能を備えて設計されていてもよい。例として、ホテル予約サイトは、特定のホテルで利用可能な5つの異なるタイプの部屋(シングルベッド、ダブルベッドなど)のための5つの異なる仮想ページテンプレートを維持することができる。仮想ページテンプレートのそれぞれを、独自のデータ要素グループ(すなわち、所与のタイプの部屋のためのレコード)に関連付けることができ、よって、各部屋は、プレビューモード中に仮想ウェブページとして表示可能および編集可能であり得る仮想ウェブページを有し得る。
実施形態では、実際のウェブページのそれぞれは、データベースを更新する機能を備えて設計されていないが、仮想ウェブページはその機能を備えて設計されていてもよい。例として、ホテル予約サイトは、特定のホテルで利用可能な5つの異なるタイプの部屋(シングルベッド、ダブルベッドなど)のための5つの異なる仮想ページテンプレートを維持することができる。仮想ページテンプレートのそれぞれを、独自のデータ要素グループ(すなわち、所与のタイプの部屋のためのレコード)に関連付けることができ、よって、各部屋は、プレビューモード中に仮想ウェブページとして表示可能および編集可能であり得る仮想ウェブページを有し得る。
さらに、方法2600は、仮想ウェブページセットのうちの別個の1つに少なくとも1つのデータ要素の各グループを表示するステップ2608を含み得る。例えば、上記のホテルウェブサイトの仮説では、プレビューモード中に、ホテルの異なるタイプの部屋に対応する5つの仮想ウェブページテンプレートのそれぞれが、データ要素の関連付けられたグループ(例えば、部屋を説明する異なるテキスト、部屋の画像、部屋の動画など)を有し得る。生成された仮想ウェブページセット(すなわち、インスタンス)は、他の技法に関連して上述したように、ブラウザまたは他のクライアントを介してユーザに表示され得る。
方法2600はまた、ユーザが仮想ウェブページテンプレートおよびインスタンスのうちの1つまたは複数を編集できるようにする編集ツールを表示することを含むステップ2610も含み得る。テンプレートは、通常のページであるかのように編集され得る。インスタンスは、通常のエディタページの閲覧および編集プロセスの一部として表示されない場合があるため、プレビューモードでのみ編集可能であり得る。代替的な実施形態では、本システムにより、通常のサイト編集プロセスの一部としてインスタンスを編集することができる。様々な編集ツールを使用することができ、編集ツールとしては、ルーラーおよびグリッド(例えば、データ要素のアライメントのため)、ドラッグアンドドロップセレクタ(例えば、カーソルによりデータ要素を移動するため)、ハイパーリンクの挿入および編集、ウィジェットまたはアプリの組み込み(例えば、アプリストアから)、ボタンの挿入および編集、テキストの作成および編集、画像の挿入および編集、ビデオの挿入および編集、スライドショーの作成および編集、カーソルのホバー機能、背景スタイル、リピータ(例えば、特定のデータ要素またはグループの複数のバージョンを作成する)、ソフトウェアベースのルータ(例えば、アクセスに使用されるURLの要素に基づいてウェブページの異なるバージョンを作成する)などが挙げられる。システムは、テンプレートおよびインスタンスに関して利用可能な編集ツールの異なるサブセットを表示する(および動作させる)ことができ、また、ユーザ、仮想ページテンプレート、特定のインスタンス、基礎となる接続されたデータグループまたは要素などに応じて、表示された編集ツールサブセットをカスタマイズすることができる。以下でさらに説明するように、ユーザは、編集ツールを介して仮想ウェブページテンプレートおよびインスタンスを編集することができ、その編集は、ウェブページのためのコンポーネント情報および/またはコンテンツを維持するデータベースに対する編集に変換され得る。
方法2600はまた、各仮想ウェブページに一意のURLを関連付けるステップ2612も含むことができる。例えば、ウェブサイトは、ドメイン名(例えば、wix.com)を有し、ウェブサイト内の各ページは異なるサフィックス(例えば、wix.com/page1、wix.com/page2、wix.com/page3など)を有し得る。さらに、場合によっては、仮想ウェブページに関連付けられたURLは、異なる(ファイルまたはディレクトリを参照する)パスまたはパラメータ値を有し得る。いくつかの実施形態では、ソフトウェアベースのルータは、ウェブサイトまたは個々のウェブページのために構成され得る。ソフトウェアベースのルータは、例えば、特定のURLプレフィックス、パス、セグメント、またはパラメータを特定のウェブページに関連付けるように
構成可能である。ウェブページのそれぞれは、データ要素を格納するデータベースから異なるデータをプルするように構成され得る。例えば、JavaScriptの実装では、ウェブページに関する到来する要求が、要求に関する情報(例えば、URL、どこから到来したか、誰から到来したかなど)を含むオブジェクトに関連付けられ得る。ソフトウェアベースのルータは、この情報を処理し、表示するウェブページ(場合により仮想ウェブページ)とそれに含めるデータ要素を決定できる。
構成可能である。ウェブページのそれぞれは、データ要素を格納するデータベースから異なるデータをプルするように構成され得る。例えば、JavaScriptの実装では、ウェブページに関する到来する要求が、要求に関する情報(例えば、URL、どこから到来したか、誰から到来したかなど)を含むオブジェクトに関連付けられ得る。ソフトウェアベースのルータは、この情報を処理し、表示するウェブページ(場合により仮想ウェブページ)とそれに含めるデータ要素を決定できる。
加えて、方法2600は、仮想ウェブページのそれぞれを個別かつ動的に表示するために、ユーザが仮想ウェブページにわたってナビゲートできるようにするユーザ選択可能機能(例えば、ボタン、スクロールバー、リンクなど)を表示するステップ2614を含み得る。したがって、上記の例では、ユーザ選択可能機能により、ユーザはホテルの異なる部屋タイプに対応する5つのウェブページセットのそれぞれを閲覧できる。各ページは動的に選択され、仮想ウェブページとして閲覧される。
方法2600は、ユーザからの1つまたは複数の仮想ウェブページ属性に対する編集を受信するステップ2616をさらに含み得る。例えば、上述の編集ツールを使用して、ユーザは、ページの背景、ページのレイアウトもしくはテンプレート、ページに組み込まれたアプリもしくはウィジェット、ページに関連付けられたURLプレフィックスもしくはサフィックス、ページ内のリピータ機能、またはページのソフトウェアベースのルータ機能を変更することもできるし、他の様々な種類の編集を実行することもできる。ウェブページテンプレート2704に加えられた変更は、サイトエリアデータベース124のテンプレートページ定義に直接書き込まれ得る。仮想ページインスタンスに加えられた変更は別のデータベースに格納されてよく、このデータベースは仮想ページインスタンスへの適応を含むものとする。このようなスキームでは、適応は特定の仮想ページインスタンスの一意のインデックスでインデックスされるものとする(例えば、上記のホテルの例では、「シングルベッドルーム#1234」)。この仮想ページインスタンスが表示のために生成されるたびに(例えば、プレビュー中またはライブ表示中に)、適応が取得および再適用される。
いくつかの実施形態では、ユーザは、仮想ページインスタンスを編集することが許可されるが、それはフィールド情報(例えば、テキスト、グラフィックス、ビデオなど)に関してのみである。例えば、そのような実施形態では、ユーザは、レイアウト、属性などを含む仮想ページインスタンスの他の要素(すなわち、コンテンツ以外)を編集することを禁止され得る。
方法2600はまた、データ要素自体への編集を受信するステップ2618も含み得る。そのような編集は、データグループの表示(すなわち、基礎となるデータグループおよび要素の閲覧および編集を可能にする表示ユーザインターフェース要素)に対して直接行われ得る。あるいは、そのような編集は、項目に関連する生成された仮想ページインスタンスのフィールドコンテンツの編集を通じて実行されてもよい。システムは、(プレビューモードで)表示される仮想ページインスタンスに追加の編集コントロールを追加することにより、そのような編集を可能にし得る(データグループに由来する各表示画像に追加される「別の画像を選択する」ボタンなど)。上述のように、データ要素はデータベースに格納されてもよい。編集には、テキストの編集、画像の置換または修正、ビデオの置換または修正、カーソルを要素上にホバーさせる機能の変更、および他の様々な種類の編集が含まれ得る。
加えて、方法2600は、1つまたは複数の仮想ウェブページに関連付けられたコードへの編集を受信するステップ2620を含み得る。コードの例は、図1~図7に関連して上述したフロントエンドコードおよびバックエンドコードであり得る。例えば、コードは
、データベースにおけるデータおよびコンテンツの収集および格納、動的ページの作成、ユーザに相対するウィジェットおよびアプリの実装、データ要素のレイアウトの繰り返し、ソフトウェアベースのルータの構成などに関連し得る。いくつかの実施形態では、ステップ2622において、スケルトンコードセグメントが生成されて、ウェブページに関連付けられたコードに対するユーザ編集を容易にし得る。例えば、スケルトンコードは、より粒度の細かいソースコードに関連付けられた機能の高レベルの抽象化であってもよく、これは、ウェブページに上記の様々な種類のフロントエンドおよびバックエンド機能を実装できる。スケルトンコードは、編集インターフェースを介してユーザに表示されてもよく、ユーザがこれを編集することができる。次いで、スケルトンコードに対するユーザ編集は、個々のウェブページに関連付けられたより粒度の細かい実際のコードの編集に変換され得る。上記のページ属性およびページデータ/フィールドコンテンツの編集に関しては、システムは、ウェブページテンプレート2704(サイトエリアデータベース124に格納され、公開前の開発変更のサンドボックス化の対象となり得る)または仮想ページインスタンス(仮想ページインスタンス適応データベースに格納され得る)に対する編集をサポートし得る。これについては、以下のステップ2630および2634の説明でさらに詳しく説明する。
、データベースにおけるデータおよびコンテンツの収集および格納、動的ページの作成、ユーザに相対するウィジェットおよびアプリの実装、データ要素のレイアウトの繰り返し、ソフトウェアベースのルータの構成などに関連し得る。いくつかの実施形態では、ステップ2622において、スケルトンコードセグメントが生成されて、ウェブページに関連付けられたコードに対するユーザ編集を容易にし得る。例えば、スケルトンコードは、より粒度の細かいソースコードに関連付けられた機能の高レベルの抽象化であってもよく、これは、ウェブページに上記の様々な種類のフロントエンドおよびバックエンド機能を実装できる。スケルトンコードは、編集インターフェースを介してユーザに表示されてもよく、ユーザがこれを編集することができる。次いで、スケルトンコードに対するユーザ編集は、個々のウェブページに関連付けられたより粒度の細かい実際のコードの編集に変換され得る。上記のページ属性およびページデータ/フィールドコンテンツの編集に関しては、システムは、ウェブページテンプレート2704(サイトエリアデータベース124に格納され、公開前の開発変更のサンドボックス化の対象となり得る)または仮想ページインスタンス(仮想ページインスタンス適応データベースに格納され得る)に対する編集をサポートし得る。これについては、以下のステップ2630および2634の説明でさらに詳しく説明する。
方法2600では、ステップ2624は、ユーザが特定の仮想ウェブページを選択できるようにし、ステップ2626は、ユーザが仮想ウェブページにわたってナビゲートできるようにする。例えば、ユーザは、ハイパーリンクまたはページの画像もしくは視覚的表現に関連付けられた他のリンクをクリックすることによりページを個別に選択することもできるし、ページにわたって視覚的にナビゲートしたりすることもできる(例えば、左/右もしくは上/下のトグルボタン、または他の選択の視覚化)。
方法2600によれば、仮想ウェブページに対するあらゆる編集(例えば、ステップ2616または2618によるインスタンスの編集)が、ステップ2828において、ウェブページのためのデータ要素を維持するデータベースに対する更新に変換され得る。例えば、ユーザが仮想ウェブページの画像を別の画像(例えば、ユーザがアップロードした画像など)に置き換える場合、新しい画像はデータベースに格納され得る。さらに、ユーザが仮想ウェブページ上のテキスト(例えば、特定のホテルの部屋の説明)を置き換える場合、更新されたテキストもデータベースに格納され得る。いくつかの実施形態では、データベースに対する更新は、仮想ウェブページに対するユーザの編集に基づいて自動的に実行され得る。データベースは仮想ウェブページの構築に使用され、仮想ウェブページのコンテンツに関連付けられるため、仮想ウェブページの編集は、それらの構築に使用されたデータベースに戻って関連付けられ得る。いくつかの実施形態では、データベースの複数のバージョンが少なくとも一時的に格納されるため、ユーザは、行った仮想ウェブページへの変更を無効にして以前のバージョンに戻したい場合に、元に戻す動作または取り消す操作を実行できる。例えば、ユーザは元に戻すまたは取り消すオプションを選択することもできるし、編集を戻したり再開したりできる仮想ウェブページの以前のバージョンに関連付けられたタイムスタンプまたはバージョン識別子を提示することもできる。そのようなバージョン管理システムはまた、公開操作が実行されるまで、公開されたバージョンの一部ではない開発データベースのバージョンへの変更をサポートし得る。これは、開発データベースの「サンドボックス化」としても知られている。
方法2600はまた、ステップ2630を含むことができ、ユーザによって行われたスケルトンコードへの編集が受信される。さらに、ステップ2634において、実際のコード(例えば、ステップ2620を介して)またはスケルトンコード(例えば、ステップ2630を介して)に対する編集は、ウェブページの実際のコードへの編集に変換され得る。上述のように、例えば、ユーザは仮想ウェブページの様々なバックエンドまたはフロントエンド機能に関連付けられた実際のコードまたはスケルトンコードを編集できる。コー
ドに対するこのような編集は、仮想ウェブページのデータ要素をホストする同じデータベースまたは別のコードデータベースに格納され得る。
ドに対するこのような編集は、仮想ウェブページのデータ要素をホストする同じデータベースまたは別のコードデータベースに格納され得る。
さらに、ステップ2632では、方法2600は、仮想ウェブページに関連付けられた実際のウェブページのライブビュー中に、通常のウェブページと仮想ウェブページのインスタンスとの両方を含む、プレビューモード中に仮想ウェブページに加えられた更新と共にウェブページの表示を可能にするステップを含み得る。上述のように、例えば、ユーザはテンプレートとインスタンスとの両方のプレビューモード中に仮想ウェブページの多数の機能(例えば、ページ構造、データ要素、フロントエンドコード、バックエンドコードなど)を編集可能であり得る。このような編集は、ページ定義またはデータ要素の変更に対する対応する更新に変換され、これは、サイトエリアデータベース124および/または別個のデータベース(例えば、データ要素データベース、インスタンス適合データベース、および/または仮想ウェブページのベースとなる別個のコードデータベース)に格納され得る。そのような別個のデータベースはまた、例えば、メモリ820または永続性記憶装置830の一部として、WBS100によってホストされてもよい。さらに、そのような編集は、実際のライブウェブページの対応する更新にも変換され得る。様々な実施形態において、仮想ウェブページおよび実際のウェブページは、同じデータベース(複数可)に基づいていても異なる(例えば、リンクされた)データベース(複数可)に基づいていてもよい。これらのデータベース(例えば、サイトエリアデータベース124、およびデータ要素データベース、インスタンス適応データベース、または個別のフロントエンド/バックエンドコードデータベースなどの他のデータベース)は、単一のデータベース、1セットのデータベース、または(それぞれが必要な機能のサブセットをサポートし得る)データベースの組み合わせとして実装され得ることに留意されたい。
図27は、本開示のいくつかの実施形態による、ウェブページの開発およびプレビューのためのシステム2700である。上述のように、システム2700は、図1、図2、図15などに関連して説明したシステムと同様であっても、その中で動作するのであってもよい。いくつかの実施形態では、システム2700は、1つまたは複数のウェブページ2704のためのデータ要素および/またはコードを格納するサイトエリアデータベース124を備えることができる。図示のように、多数のウェブページ2704が維持されてもよく、それらのそれぞれがそれ自体の対応するデータ要素を有し得る。上述のように、データ要素は、1つまたは複数のデータ要素のデータグループ210に編成されてもよい。上述のように、そのようなデータグループ2710は、システム全体、サイトグループ固有、サイト固有またはページ固有(通常、所与のウェブページテンプレート2704のため)であり得る。
図27に示すように、サイトエリアデータベース124は、ネットワークを介してウェブブラウザ131または他のクライアントアプリケーションと通信することができ、これらはユーザによって操作され得る。ウェブブラウザ131は、データグループ210内のデータ要素を使用して、サイトエリアデータベース124内の各ウェブページテンプレート2704に対応する仮想ウェブページ2712を表示することができる。さらに、各仮想ウェブページ2712は、データ要素211に関連付けられ得る。さらに、ユーザは、データ要素グループ2714の一部として、データ要素(例えば、データ要素1 211およびデータ要素2 2718)の個別の表示を有することができる。上述のように、ユーザは、その要素2710、2714、211、2718を含む表示された仮想ウェブページ2712と対話して、仮想ウェブページ2712の様々な機能を編集することができる。編集は、特定のデータ要素、ページ構造機能、フロントエンドコード、バックエンドコードなどを含み得る。上述のように、そのような編集は、サイトエリアデータベース124および/または他のデータベースにより受信され得る。
図28は、本開示のいくつかの実施形態による、仮想ウェブページのブロック図2800である。上記の例と整合して、仮想ウェブページ2712は、表示機能2804、検索要素2806、ブックマーク2810、スクロール機能2810、および他の機能を含む様々なユーザ選択可能機能2802を含むことができる。仮想ウェブページ2712は、上述のように、データ要素2714およびフロントエンドコード2812をさらに含み得る。さらに、仮想ウェブページ2712は、動的ウェブページコードなどのバックエンドコード(図示せず)に関連付けられ得る。上述のように、ユーザは仮想ウェブページ2712に対して、これを閲覧し、これと対話し、これを編集できる。このような編集は、サイトエリアデータベース124などのウェブサイト構築システムの1つまたは複数のコンポーネントで受信され得る。仮想ウェブページ2712の表示により、ユーザは、対応するウェブページが稼働する前にユーザが行っている編集を視覚化できる。仮想ウェブページ2712をライブモードで公開するには、上述のように、ユーザは「公開」または「レンダリング」リンクを選択できる。
図29は、本開示のいくつかの実施形態による、ウェブページの動的リフレッシュのタイムライン表示2900である。特に、ユーザが仮想ウェブページ2712を編集すると、編集はサイトエリアデータベース124で、したがってユーザのブラウザでもリフレッシュされ得る。図29に示すように、データグループ2710は、他のデータ要素の中でも、データ要素1 211およびデータ要素2 2718を含むことができる。データ要素1 211内に、タブ1 2902が表示されてもよく、データ要素2 2718内に、テストタブ2 2904が表示されてもよい。タブ1 2902およびテストタブ2 2904は、図示のように、他の要素(例えば、検索バー、ドロップダウンメニューなど)と共に仮想ウェブページ2712上に表示されてもよい。
タイムライン表示2900において時間が進むと、ユーザは仮想ウェブページ2712を編集できる。例えば、図示のように、ユーザはテストタブ2 2904を編集して、編集されたタブ2を作成できる。さらに、データグループ2710の一部として、新しいデータ要素3 2906を仮想ウェブページ2712に追加することができる。仮想ウェブページ2712に対する編集が行われると、ライブ環境2908で対応する編集が行われ得る。例えば、ユーザが「公開」または「レンダリング」機能を選択すると、ライブ環境2908が更新されて、データグループ2710および仮想ウェブページ2712の他の態様への更新が表示され得る。例えば、実際のウェブページ2910の最初のバージョンには、編集されたタブ2またはタブ3が含まれない場合があるが、実際のウェブページ2912の後続のバージョンには、これらの更新が含まれる場合がある。様々な実施形態において、仮想ウェブページ2712への更新は、自動的に行われるのであっても、ユーザがリフレッシュまたは更新機能を選択すると行われるのであってもよい。さらに、ライブ環境2908における実際のウェブページ2910および2912への更新は、ユーザがライブ環境2908への遷移を(例えば、「公開」または「レンダリング」リンクを選択することにより)確認すると行われ得る。
図30は、本開示のいくつかの実施形態による、動的プレビューシステム3000のブロック図を示している。図30に示すように、動的プレビューシステム3000は、例えばデプロイ環境1510にウェブページが現れるときにウェブページを表示するのに役立つ。プレビューインターフェース3010は、ウェブページを表示するオンラインエディタインターフェース243内のフレームまたは他のグラフィカルインターフェースであり得る。いくつかの実施形態では、プレビューインターフェース3010は、オンラインエディタインターフェース243を示すために使用されているウェブブラウザ上で開かれた別個のタブであり得る。
プレビューインターフェース3010は、静的ウェブページと仮想ウェブページ(すな
わち、所与のウェブページテンプレート2704のインスタンス)との両方を表示するために使用され得る。プレビューインターフェース3010で閲覧するために生成された仮想ウェブページには、ナビゲーションインターフェース242が付随してもよい。プレビューインターフェース3010により、ナビゲーションインターフェース242がスクロール可能な機能を含むことができて、ユーザが、プレビューインターフェース3010で表示するために生成された複数の仮想ウェブページにわたってスクロールできる。ナビゲーションインターフェース242は、シーケンシャルナビゲーションおよび特定の仮想ウェブページへの直接アクセスの両方、ならびに検索による(例えば、特定の仮想ページを識別するために使用されるキーデータ項目の値を使用することによる)仮想ページ間のナビゲーションを可能にし得る。ナビゲーションインターフェース242は、特定の仮想ウェブページに直接アクセスすることができ、選択的に閲覧するためにブックマークされた仮想ウェブページをサポートすることができる。例えば、プレビューインターフェース3010に表示されている仮想ウェブページは、最初、最後、前または次の仮想ウェブページへのリンクを伴う場合がある。WBS100はまた、単なる直線的な構成だけでなく、仮想ページの他の構成もサポートしてもよい。例えば、WBS100は、「ツリーの上のレベルに移動する」または「現在のページより下のレベルを展開する」などの追加オプションを使用してナビゲートされ得る仮想ページの階層構成をサポートすることができる。
わち、所与のウェブページテンプレート2704のインスタンス)との両方を表示するために使用され得る。プレビューインターフェース3010で閲覧するために生成された仮想ウェブページには、ナビゲーションインターフェース242が付随してもよい。プレビューインターフェース3010により、ナビゲーションインターフェース242がスクロール可能な機能を含むことができて、ユーザが、プレビューインターフェース3010で表示するために生成された複数の仮想ウェブページにわたってスクロールできる。ナビゲーションインターフェース242は、シーケンシャルナビゲーションおよび特定の仮想ウェブページへの直接アクセスの両方、ならびに検索による(例えば、特定の仮想ページを識別するために使用されるキーデータ項目の値を使用することによる)仮想ページ間のナビゲーションを可能にし得る。ナビゲーションインターフェース242は、特定の仮想ウェブページに直接アクセスすることができ、選択的に閲覧するためにブックマークされた仮想ウェブページをサポートすることができる。例えば、プレビューインターフェース3010に表示されている仮想ウェブページは、最初、最後、前または次の仮想ウェブページへのリンクを伴う場合がある。WBS100はまた、単なる直線的な構成だけでなく、仮想ページの他の構成もサポートしてもよい。例えば、WBS100は、「ツリーの上のレベルに移動する」または「現在のページより下のレベルを展開する」などの追加オプションを使用してナビゲートされ得る仮想ページの階層構成をサポートすることができる。
図31は、本開示のいくつかの実施形態による、編集中の仮想ウェブページ3110のプレビューを示している。図31に示すように、フロントエンド126はデータグループ210に関連付けられている。フロントエンド126に含まれる構築ツール121は、データグループ210の特定のデータ要素に関連付けられ得る。仮想ウェブページ3110は、フロントエンド126を含むインデックス可能なウェブページ125を表示でき、プレビューインターフェース3010でプレビューされ得る。いくつかの実施形態では、プレビューインターフェース3010は、オンラインエディタインターフェース243内のフレームまたは他のグラフィック表現であり得る。プレビューインターフェース3010では、様々な言語を使用する、アクセシビリティ要件に適合された、または特定の対象者向けになんらかの仕方で修正された、様々なモバイルおよびデスクトップデバイスに表示されるように、仮想ウェブページ3110をプレビューできる。
図32は、本開示のいくつかの実施形態による、データグループとウェブサイトとの間の関係を示す概略図である。図32に示すように、ウェブサイトの仮想ウェブページのグループ3220は、同じデータグループ210に関連付けられ得る。いくつかの実施形態では、仮想ウェブページのグループ3220は、1セットのデータグループ3230に関連付けられ得る。いくつかの実施形態では、ウェブサイトのグループ3240は、同じ1セットのデータグループ3230を共有してもよい。1セットのデータグループ3230を共有するウェブサイトのグループ3240は、同じ所有者またはオペレータを有していてもよいし、そうでなければ特定のデータグループ210にアクセスするための(アクセス制御メカニズムを介した)適切なパーミッションを付与されていてもよい。いくつかの実施形態では、1セットのデータグループ3230を共有するウェブサイトのグループ3240は、上述のように、同じ開発者/設計者1540によって構築されている場合がある。
図32に示すように、リピータ3213は、ウェブページのフロントエンドに表示される構築ツールであり、デザインまたはレイアウトが繰り返される異なるセクションに異なるコンテンツ項目またはグループを表示する。いくつかの実施形態では、リピータ3213は、本明細書でさらに説明するように、ソフトウェアベースのルータを使用して生成された仮想ウェブページ3111の一部であっても、通常の(静的)インデックス可能なウェブページ125の一部であってもよい。リピータ3213は、データグループ210のデータ要素1 211およびデータ要素M 3212に基づいて異なるコンテンツを表示
する。リピータは、データグループ210のデータグループサブセット3213に直接関連付けられ得る。例えば、リピータを使用して、テキストおよび画像の5つの異なるグループを作成できる。各グループは、同じ比率およびレイアウトでテキストおよび画像を自動的に配置できる。それにもかかわらず、いくつかの実施形態では、テキストおよび画像の実際のコンテンツは、各グループで異なり得る。
する。リピータは、データグループ210のデータグループサブセット3213に直接関連付けられ得る。例えば、リピータを使用して、テキストおよび画像の5つの異なるグループを作成できる。各グループは、同じ比率およびレイアウトでテキストおよび画像を自動的に配置できる。それにもかかわらず、いくつかの実施形態では、テキストおよび画像の実際のコンテンツは、各グループで異なり得る。
図33は、本開示のいくつかの実施形態による、仮想ウェブページの生成に関与するコンポーネントを示す概略図である。図33に示すように、ウェブページテンプレート2704は、インデックス可能なウェブページと同様に、データグループ210および他のデータグループに関連付けられ得る。上述のように、ソフトウェアベースのルータ3310を使用してデータグループ210内のデータ要素をバインドすることができ、ウェブページテンプレート2704に適用して仮想ウェブページ3111、3313、および3312を生成することができる。ソフトウェアベースのルータ3310は、データグループ210内のデータ要素を選択/フィルタリング/並べ替えして、ユーザによって送信されたURLに基づいてウェブページテンプレート2704および仮想ウェブページグループに適用することができる。ソフトウェアベースのルータ3310は、URLプレフィックスに基づいてウェブページテンプレート2704を識別する。ソフトウェアベースのルータ3310は、URLプレフィックスに続くURL要素(例えば、サフィックスコンポーネント、テキストセグメント、またはパラメータ値)に基づいて仮想ウェブページを生成するために、ウェブページテンプレート2704に適用されるデータグループ210のデータ要素を識別してもよい。いくつかの実施形態では、URLプレフィックス「prefix1」は、ウェブページテンプレート2704のソフトウェアベースのルータ3310を識別する。ソフトウェアベースのルータ3310は、サフィックス値「label1」および「label2」に基づいて、それぞれ仮想ウェブページ3111および3312を生成できる。ソフトウェアベースのルータ3310は、ウェブページテンプレート2704と関連データグループ210、および他のデータグループを使用して生成され得るすべての仮想ウェブページの可能なURLをリストするサイトマッププレフィックス1サイトマップ3313を生成できる。プレフィックス1サイトマップ3313は、検索エンジン170により仮想ウェブページ3111および3312をインデックスするのに役立ち得る。
図34は、本開示のいくつかの実施形態による、仮想ウェブページの生成およびプレビューに関与するステップを示すフローチャート3400である。フローチャート3400は、上述のシステム実施形態で実行され得るステップを表す。
図34に示すように、ステップ3410において、動的プレビューシステム3000は、サイトエリアデータベース124にデータ要素を格納することができる。上述のように、データ要素は、テキスト、画像、ビデオ、背景、およびこれらのオブジェクトタイプのいずれかを組み合わせから構成されるレコードなど、様々な異なる形式を取ることができる。
ステップ3420において、動的プレビューシステム3000は、格納されたデータ要素をデータグループに編成することを可能にする命令を格納することができる。例えば、グループはデータベースで定義され得る。さらに、グループは、グループ内の要素間の関係、または値が他のフィールドに依存するデータ要素のフィールドによって定義され得る。上記の実施形態と整合して、視覚要素、フィールド、または特定のウェブページが定義される前に、データグループが定義され得る。
ステップ3430において、動的プレビューシステム3000は、サイトエリアデータベース124で以前に作成されたデータグループに追加のデータ要素を追加するために、
オンラインエディタインターフェース243を表示するウェブブラウザにさらなる命令を提供することができる。このようにして、既存のグループを補足または編集して、異なるまたは追加の要素を含めることができる。ユーザはステップ3420を繰り返すことができ、いつでも戻ってデータ要素をさらに追加できる。同様に、このステップは、削除や更新など、データ要素に対して追加の操作を実行するための命令を含み得る。例えば、ユーザはステップ3410、3420、および3430の間を循環することもできるし、ステップ3430に進むこともできる。
オンラインエディタインターフェース243を表示するウェブブラウザにさらなる命令を提供することができる。このようにして、既存のグループを補足または編集して、異なるまたは追加の要素を含めることができる。ユーザはステップ3420を繰り返すことができ、いつでも戻ってデータ要素をさらに追加できる。同様に、このステップは、削除や更新など、データ要素に対して追加の操作を実行するための命令を含み得る。例えば、ユーザはステップ3410、3420、および3430の間を循環することもできるし、ステップ3430に進むこともできる。
ステップ3440において、動的プレビューシステム3000は、サイトエリアデータベース124に格納されたデータグループの以前に挿入されたデータ要素を、オンラインエディタインターフェース243で編集されているウェブサイトに関連付けるのを支援する命令を実行し得る。ユーザは、ステップ3420を繰り返すことができ、いつでも戻って、構築中のウェブサイトのウェブページと、サイトエリアデータベース124に格納されたデータグループとして編成されたデータ要素との関連付けをさらに作成できる。
ステップ3450において、動的プレビューシステム3000は、データ要素グループをウェブサイトのウェブページに関連付けるのを支援するための命令を提供する。これは、上述のように、フォームのフィールドを相互にリンクして、フィールドで許可されている潜在的な値をアクティブ化/非アクティブ化およびフィルタリングの両方を行うことを含み得る(例えば、住所を入力するフォームは、状態フィールドにおける選択に応じて「市」フィールド値にリストされ得る)。
ステップ3460において、動的プレビューシステム3000は、オンラインエディタインターフェース3000に命令を提供して、オンラインエディタインターフェース243で構築中のウェブサイトのウェブページのプレビューを可能にする。上述のように、プレビューは、ユーザがリアルタイムで編集できるようにし得る。
ユーザは、ステップ3430、3440、3450、3460を何度でも任意の順序で繰り返すことができる。
図35は、本開示のいくつかの実施形態による、ウェブサイトホスティングシステム3500と対話するユーザの概略図である。図35に示すように、ウェブサイトホスティングシステム3500は、ウェブサイトを構築および表示する1つまたは複数のシステムを含むホスティングサーバ3510と、プラグインコードを実行するプラグインサーバ3520と、プロセッサ260と、プラグインコンポーネントおよびコードを格納するメモリ820と、プラグインコードおよび他のコンポーネントを開発しアップロードするインターフェース3570と、を備える。
ホスティングサーバ3510は、共同ホストされたウェブサイト3511、3512、および3513をホストする1つまたは複数のサーバであり得る。ホスティングサーバ3510は、例えば、オンデマンドシステム800、または別の種類のウェブサイトホスティングシステムにおけるウェブサーバ実行インスタンスであり得る。いくつかの実施形態では、ホスティングサーバ3510は、オンデマンドシステム800の複数のウェブサーバ実行インスタンスであってもよい。ホスティングサーバ3510はまた、上述のように、開発者/設計者1540およびエンドユーザ1530によって編集およびアクセスされたウェブサイトを格納しているWBS100であってもよい。
編集ツール411は、上述のように、ホスティングサーバ3510でホストされているウェブサイトで共有されているウェブサイトを編集するための共通ツールである。いくつかの実施形態では、編集ツール411は、共同ホストされたウェブサイト3511~35
13をホストする複数のホスティングサーバ3510にわたって共有されてもよい。
13をホストする複数のホスティングサーバ3510にわたって共有されてもよい。
プラグインサーバ3520は、分離環境3521でプラグインコードを実行する1つまたは複数のサーバであり得る。いくつかの実施形態では、プラグインサーバ3520は、ホスティングサーバ3510と同じインフラストラクチャを使用する(これは、上述の物理サーバまたはウェブサーバ実行インスタンスであってもよい)。プラグイン3530はメモリ820に存在し、ユーザインターフェース3531、フロントエンドプラグインコード3532、およびバックエンドプラグインコード3533を介して表示またはアクセスできる。
ユーザ3540~3560は、ホスティングサーバ3510から編集ツール411にアクセスして、それぞれウェブサイト3511~3513を編集できる。いくつかの実施形態では、例えば、ユーザ3540により編集されているウェブサイト3511はプラグイン3530を含むことができる。例えば、ウェブサイト3511は、ウェブ閲覧デバイス130のウェブブラウザ131を使用してウェブサイト3511にアクセスすると、ビデオプレーヤープラグイン3530を介してビデオを再生できる。ユーザ3540がウェブサイト3511を変更することは、インターフェース3570を介したプラグインコードの編集およびアップロードを含み得る。いくつかの実施形態では、インターフェース3570は編集ツール411の一部であってもよい。
ユーザ3540~3560は、共有プラットフォーム3580を介してホスティングサーバ3510上のウェブサイト3511~13と対話する。共有プラットフォーム3580により、ユーザのグループがウェブサイトのグループを編集できる。共有プラットフォーム3580は、ユーザ3540~3560のどのグループがどのウェブサイト3511~13を編集するためのアクセスを有するかを判定するように構成されたソフトウェアであり得る。いくつかの実施形態では、複数のウェブサイト3511~13をホストするホスティングサーバ3510自体が共有プラットフォーム3580として機能する場合がある。
エンドユーザ1530がウェブ閲覧デバイス130上のウェブブラウザ131を使用してウェブサイト3511を閲覧することには、プラグイン3530のユーザインターフェース3531が含まれ得る。例えば、プラグイン3530はビデオプレーヤーであり、ユーザインターフェース3531はビデオプレーヤープラグイン3530に合わせた様式にされた再生コントロールボタンを含むことができる。フロントエンドプラグインコード3532はまた、エンドユーザ3540がウェブサイトにアクセスするときにユーザインターフェース3531を介して渡される場合もある。エンドユーザ1530がプラグイン3530のユーザインターフェース3531と対話すると、プラグイン3530のフロントエンドプラグインコード3532がウェブブラウザ131で実行されことになり得る。いくつかの実施形態において、ウェブサイト3511とのエンドユーザ1530の対話はまた、バックエンドプラグインコード3533をプラグインサーバ3520で実行させ得る。例えば、エンドユーザ3540がビデオプレーヤープラグインの再生コントロールをクリックすると、フロントエンドプラグインコード3532が実行されて、ビデオのストリーミング要求が行われ、さらにバックエンドプラグインコード3533がネットワーク帯域幅の可用性に基づいてビデオを圧縮し得る。
図36は、本開示のいくつかの実施形態による、共同ホストされたウェブサイトへの制御されたアクセスの技法を示している。図36に示すように、ユーザ3540、3550は一緒にグループ化され、共同ホスト1ウェブサイト3511および3512へのアクセスが可能になる。ユーザ3621および3622は、共同ホスト2ウェブサイト3611および3612へのアクセスを有し得る。ユーザは、1つまたは複数の共同ホストされた
ウェブサイトにアクセスできるが、許可されたグループの一部ではないウェブサイトへのアクセスは許可されていない。ユーザは、例えば、特定のウェブサイトの所有者であるか、登録ユーザであるか、認証されているかなどに基づいて、アクセス権が定義され得る。
ウェブサイトにアクセスできるが、許可されたグループの一部ではないウェブサイトへのアクセスは許可されていない。ユーザは、例えば、特定のウェブサイトの所有者であるか、登録ユーザであるか、認証されているかなどに基づいて、アクセス権が定義され得る。
図37は、本開示のいくつかの実施形態による、共通ルートの下でプラグインコードを共有する共同ホストされたウェブサイトグループを示している。図37に示すように、ウェブホスティングシステム3500は、2セットの共同ホストされたウェブサイトを有し、各セットはURLルートにより互いに異なる。例えば、共通ルート1の共同ホストされたウェブサイト3711はドメインwww.a.comを共有でき、共通ルート2の共同ホストされたウェブサイト3731は、ドメインwww.b.comを共有できる。あるいは、共通ルート1の共同ホストされたウェブサイト3711は、共通サブドメインa.wixsite.comを有することができ、共通ルート2の共同ホストされたウェブサイト3731は、共通サブドメインb.wixsite.comを有することができる。共通ルートを持つウェブサイトをホスティングサーバまたはホスティング環境で共同ホストして、分離環境を作成し、他の共同ホストされたウェブサイトのセットとのやり取りを排除することができる。共同ホストされたウェブサイトはまた、プラグインコードを実行するための分離環境を作成するための異なるプラグインサーバを有し得る。共通ルート1の共同ホストされたウェブサイト3711および共通ルート2の共同ホストされたウェブサイト3731は、同じプロセッサ260およびメモリ820をさらに共有してもよいし、異なるプロセッサおよびメモリを有してもよい。図38は、本開示のいくつかの実施形態による、バックエンドプラグインコード3533の分離された実行環境を示している。図38に示すように、プラグイン3530分離環境のバックエンドプラグインコード3533は、コンテナ(例えば、ドッカー)3810または仮想マシン3820またはオペレーティングシステムプロセス3830に基づいてもよい。いくつかの実施形態では、分離環境3521は、1つまたは複数のコンテナ3810、仮想マシン3820、およびオペレーティングシステムプロセス3830(例えば、サーバレスコード)を含むことができ、それぞれ別個のプラグインバックエンドコード3533を実行する。いくつかの実施形態では、プラグイン3530をホストするプラグインサーバは、複数の分離環境を含み得る。
図39は、本開示のいくつかの実施形態による、フロントエンドプラグインコード3532の制御されたアクセスおよび実行を示している。図39に示すように、ウェブサイト3511にアクセスすると、プラグイン3530のフロントエンドプラグイン1コード3532および別のプラグインのフロントエンドプラグイン2コード3931にアクセスできる。ウェブサイト3511は、それぞれの別個のサブ領域3910および3930でプラグインのそれぞれを確実に実行し得る。ウェブサイトホスティングシステム3500はまた、ウェブサイトの他の特定のサブ領域にのみアクセスできるようにするために、安全な通信チャネル(例えば、SSL、セキュアトンネルなど)を作成することもできる。安全な通信チャネルにより、フロントエンドプラグインのウェブサイトの他のサブ領域へのアクセスが制限され得る。例えば、サブ領域3910で実行されるフロントエンドプラグイン1コード3532は、別のサブ領域3920と通信できるが、サブ領域3940へのアクセスが拒否され得る。プラグインのアクセス可能なサブ領域は、表形式、信頼できるレジストリ、構成ファイル、または安全なデータベースでリストされ得る。例えば、クラウドコンピューティングベースの構成では、クラウドオーケストレータプラットフォームが、仮想コンピューティングリソース(例えば、サブ領域3910、サブ領域3920、サブ領域3940など)のリストまたはマッピングを維持することができ、それらの接続パーミッションを定義することができる。そのようなリストまたはマッピングは、サブ領域3910、サブ領域3920、およびサブ領域3940による特定の接続またはアクションを許可し、他の接続またはアクションを拒否し得る。いくつかの実施形態では、すべての通信が1つまたは複数のハブ(例えば、認証または認可確認を実行するハブ)を通過
できるようにすることにより、安全な通信チャネルが提供される。このようなハブは、例えば、システムクライアント、システムサーバ、またはその両方に常駐することができる。通信を開始するサブ領域の一意の識別子を確認することによっても、安全な通信を確立することもできる。例えば、getId()メソッド呼び出しを使用して、通信メッセージの発信元サブ領域IDを識別し、許可リストまたはマッピングに含まれているか否かを判定できる。
できるようにすることにより、安全な通信チャネルが提供される。このようなハブは、例えば、システムクライアント、システムサーバ、またはその両方に常駐することができる。通信を開始するサブ領域の一意の識別子を確認することによっても、安全な通信を確立することもできる。例えば、getId()メソッド呼び出しを使用して、通信メッセージの発信元サブ領域IDを識別し、許可リストまたはマッピングに含まれているか否かを判定できる。
図40は、本開示のいくつかの実施形態による、プラグインコードのクライアントサイドの分離した実行を示している。図40に示すように、エンドユーザ1530によってウェブブラウザ131を使用してアクセスされるウェブサイト3511は、プラグイン3530のフロントエンドプラグインコード3532へのアクセスをもたらし得る。エンドユーザ1530アクセスにより、フロントエンドプラグインコード3532を単独で実行するためのiframeが作成され得る。いくつかの実施形態では、フロントエンドプラグインコード3532は、単独で実行するためにウェブサイト3511の異なるサブ領域3712~3713にコピーされ得る。例えば、ウェブサイト3511には、それぞれ異なるビデオストリームをストリーミングしているが同じプラグインコードを使用している、複数のビデオプレーヤーが表示され得る。いくつかの実施形態では、Iframeで実行されるプラグインコード3532~3533は、クライアントサイドのクッキー(例えば、HTTPクッキー)へのアクセスを持たない場合がある。
図41は、本開示のいくつかの実施形態による、ウェブサイトおよびプラグインコードへのアクセスおよび実行に関与するステップを示すフローチャートである。図41に示すように、ステップ4110において、ウェブサイトホスティングシステム3500は、共通のホストサーバまたはサーバのセット内で1つまたは複数の共通データ要素、テンプレート、コードの一部、ルート、または他の機能を共有するウェブサイトをホストする。サーバはまた、複数のユーザの所有権または管理特権および編集特権に基づいて共同ホストされ得る。例えば、ウェブサイトホスティングシステム3500は、複数の独立した提携なしのエンティティまたは個人によって作成および管理されるウェブサイトをホストし得る。
ステップ4120において、ウェブサイトホスティングシステム3500は、編集ツール411へのアクセスを提供して、システムにより共同ホストされるウェブサイトをさらに編集する。上述のように、編集ツール411により、ユーザはウェブサイトの様々な態様を編集できる。
ステップ4130において、編集目的でウェブサイトにアクセスするためのユーザの取り組みにより、ウェブホスティングシステム3500は、要求を行うユーザがウェブサイトを編集するためのアクセス権または特権を持っているか否かを評価する。評価は、特定のウェブサイトの所有権に依存し得る。いくつかの実施形態では、ウェブサイトの所有者または管理者は、編集ツール411を使用して他のユーザに管理者および/または編集アクセスを提供することができる。さらに、いくつかの実施形態では、編集権は、ユーザが登録ユーザであるか、ウェブホスティングシステム3500にアクセスするために認証されているか否かに依存し得る。
ステップ4130の答えが「いいえ」の場合、ウェブサイトへの要求されたアクセスは拒否され、ユーザはウェブサイトの管理者に編集権限を要求する必要があり得る。プロセス4100は、ウェブサイトを編集するためのアクセスを取得できなかった場合に完了したと見なされる。あるいは、プロセス4100は、ステップ4120または4130に戻って循環してもよい。
ステップ4130に対する答えが「はい」である場合、プロセス4110はステップ4150に進む。ステップ4150において、プラグインをアップロードするためのインターフェースが、ウェブサイトを編集するためのアクセスを要求するユーザに提示される。インターフェースは、ユーザがフロントエンドまたはバックエンドコードを編集するための上で説明したインターフェースと同様であってもよい。
ステップ4160において、ウェブサイトホスティングシステム3500はプラグインの変更を受信して格納する。ユーザがアップロードしたプラグインは、例えば、プラグイン3530のバックエンドプラグインコード3533への編集を含み得る。いくつかの実施形態では、ユーザ編集は、プラグイン3530のフロントエンドプラグインコード3532への編集を含み得る。あるいは、ユーザはまた、プラグイン3530のユーザインターフェース3531を編集することもできる。いくつかの実施形態では、ユーザは、ユーザインターフェース3531、フロントエンドプラグインコード3532、およびバックエンドプラグインコード3533のすべてを編集することができる。
ユーザ編集プラグインコード(例えば、フロントエンドプラグインコード3532またはバックエンドプラグインコード3533)は、複数のセッションにわたってプラグインコードを編集して、ステップ4120~4160ならびにそれよりも少ないまたは多いステップの繰り返しを可能にし得る。
ステップ4170において、ウェブホスティングシステム3500は、ウェブサイト3511がユーザ(例えば、エンドユーザ1530、3540、3550、3560)によってアクセスされたときにプラグイン3530を実行する。プラグインコードの実行は、コードを実行するための分離環境3521の作成を含む。分離環境3521は、フロントエンド3532およびバックエンド3533プラグインコード3530をそれぞれ実行するために、ウェブブラウザのクライアントサイドとサーバサイドとの分離を含み得る。
図42は、本開示のいくつかの実施形態による、ウェブページを編集し、データベースコレクションを作成するための例示的なユーザインターフェースである。例えば、ウェブページは、WIX.COMが提供するようなウェブサイト開発システムを介して生成され得る。図示のように、1つまたは複数の動的ウェブページをサポートするデータベースを作成できる。
サイト構造サイドバー4202は、様々なページ(例えば、ホーム、大学、イベント、奨学金、学生エリア、学位別コース、およびニュース)のリストなど、ウェブサイトを編集および構成するための様々なオプションと、パブリック機能、バックエンド機能、およびデータベース機能のためのオプションと、を含み得る。さらに、ツールバー4204は、ウェブページ上でコンテンツを追加および編集するための様々なオプションを含むことができる。
図示のように、インターフェース4206により、ユーザはデータベースを構成できる。インターフェース4206は、例えば、ユーザがサイト構造サイドバー4202から「データベース」オプションを選択した場合に生成され得る。ユーザは、フィールド4208において一意の名前を付けてデータベースをカスタマイズできる。この例では、データベースは「コース」データベースと呼ばれ得る。
図43は、本開示のいくつかの実施形態による、ウェブページを編集し、データベースコレクションのためのパーミッションを構成するための例示的なユーザインターフェースである。例えば、上記の例を続けると、「コース」データベースを作成するユーザは、データベースおよびそれに基づき得る対応する動的ページの様々な異なるパーミッション4
310オプションにアクセスできる。パーミッション4310は、ウェブページのコンテンツ、フォームへのデータ入力、ページのユーザにより生成されたコンテンツ、登録メンバーに限られるコンテンツ、登録メンバーのみが完了できるフォーム、および特定のユーザ(例えば、管理者)のみがアクセスできる特定のプライベートデータに対処し得る。
310オプションにアクセスできる。パーミッション4310は、ウェブページのコンテンツ、フォームへのデータ入力、ページのユーザにより生成されたコンテンツ、登録メンバーに限られるコンテンツ、登録メンバーのみが完了できるフォーム、および特定のユーザ(例えば、管理者)のみがアクセスできる特定のプライベートデータに対処し得る。
図44は、本開示のいくつかの実施形態による、ウェブページおよびデータベースコレクションにおけるエントリを編集するための例示的なユーザインターフェースである。例えば、「コース」データベースは、フィールド4412(タイトル)、4414(説明)、4416(画像)、4418(講義担当者)などから構成され得る。これらのフィールドは、データベースから抽出され、特定の動的ウェブページに含めることができるコースに関する情報を含み得る。特に、フィールドは、テキストコンテンツ(例えば、フィールド4412、4414、および4418)と、画像やビデオなどの他のコンテンツ(例えば、フィールド4316)と、を含み得る。図示のように、フィールド4416は、TINGというタイトルのコースに対応する画像を含む。いくつかの実施形態では、ユーザは、各動的ウェブページの種類またはレイアウトをさらに定義し、各動的ページにURLを指定することができる。例えば、URLのサフィックスは、データベースの列(例えば、タイトル)に対応し得る。
図45は、本開示のいくつかの実施形態による、ウェブページを編集し、データベースコレクションからの出力を表示するための例示的なユーザインターフェースである。例えば、作成された動的ウェブページには、データベースからのコンテンツが含まれ得る。図示のように、コンテンツ4520は、データベースからのコースの説明を含む。コンテンツ4520は、ユーザが手動でウェブページにコピーすることを必要とすることなく、データベースから自動的に抽出される。この技法を使用して多数の動的ページを作成でき、それぞれがデータベースの異なる部分にリンクし、データベースへのリンクに基づいてコンテンツの一意の構成を有することができる。
図46は、本開示のいくつかの実施形態による、ウェブページを編集し、リピータ機能を作成するための例示的なユーザインターフェースである。上記のように、リピータ機能をウェブサイトまたはページに追加して、構造またはレイアウトが類似した要素の2つ以上のインスタンス(例えば、テキストと画像との組み合わせ)を作成できる。リピータを使用すると、少なくとも1つの点で異なる(例えば、異なるテキスト、画像などを持つ)要素の2つ以上のインスタンスを作成できる。
図示のように、ユーザはリピータを構成するためにリピータメニュー4622にアクセスできる。例えば、ツールバー4204を使用して、ユーザはリスト&グリッドオプションを選択でき、これにより、リピータおよび複数のオブジェクトを表示する他の様々な要素を作成できる。リピータインスタンスにコンテンツを投入するために、ユーザはリピータまたは個々のインスタンスをデータベースに格納されているデータなどのデータセットにリンクできる。いくつかの実施形態では、ユーザは、インスタンスのそれぞれに同様に要素を1つ追加することを決定してもよい。1つのインスタンスに要素を追加すると、各インスタンスに要素が自動的に追加される。あるいは、ユーザは、リピータによって作成された各インスタンスが異なるコンテンツを持つように指定しようとしてもよい(例えば、バックエンドまたはフロントエンドコードを通じて)。
図47は、本開示のいくつかの実施形態による、ウェブページを編集し、リピータ機能の結果を示すための例示的なユーザインターフェースである。図示のように、ユーザは、リピータを介して要素4724の3つの組み合わせを作成している。各組み合わせ4247は、画像、テキスト(地名)、テキスト(説明)、および「続きを読む」ハイパーリンクアイコンという同様の構造を持つ。編集モードでは、ユーザは、例えば、テキスト要素
に対する画像の位置を変更したり、ハイパーリンクを変更したり、フィールドのサイズを変更したりすることにより、これらのインスタンスのレイアウトおよび外観をさらに編集できる。さらに、上述のように、インスタンスの各要素はデータベースの異なる部分に接続できる。例えば、要素4724の3つの組み合わせは、データベースからそれぞれ抽出すべきコンテンツに対応するデータベース内の異なる列にそれぞれリンクすることができる。このようにして、要素4724の3つの組み合わせは共通のレイアウトを有するが、それぞれが異なるテキストまたはグラフィックコンテンツを有する。
に対する画像の位置を変更したり、ハイパーリンクを変更したり、フィールドのサイズを変更したりすることにより、これらのインスタンスのレイアウトおよび外観をさらに編集できる。さらに、上述のように、インスタンスの各要素はデータベースの異なる部分に接続できる。例えば、要素4724の3つの組み合わせは、データベースからそれぞれ抽出すべきコンテンツに対応するデータベース内の異なる列にそれぞれリンクすることができる。このようにして、要素4724の3つの組み合わせは共通のレイアウトを有するが、それぞれが異なるテキストまたはグラフィックコンテンツを有する。
本明細書では、ソフトウェアコードまたは命令として実装または定義され得る様々な動作または機能が説明されている。このようなコンテンツは、直接実行可能(「オブジェクト」または「実行可能」形式)、ソースコード、または差分コード(「デルタ」または「パッチ」コード)とすることができる。本明細書で説明される実施形態のソフトウェア実装は、コードまたは命令が格納された製品を介して、または通信インターフェースを介してデータを送信する通信インターフェースを動作させる方法を介して提供され得る。機械またはコンピュータ可読記憶媒体は、説明された機能または動作を機械に実行させ、記録可能な/記録不可能な媒体(例えば、読み取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスク記憶媒体、光学記憶媒体、フラッシュメモリデバイスなど)など、機械(例えば、コンピューティングデバイス、電子システムなど)によってアクセス可能な形式で情報を格納する任意のメカニズムを含む。通信インターフェースは、メモリバスインターフェース、プロセッサバスインターフェース、インターネット接続、ディスクコントローラなど、別のデバイスと通信するための有線、無線、光学などの媒体のいずれかとインターフェースする任意のメカニズムを含む。通信インターフェースは、構成パラメータを提供すること、および/またはソフトウェアの内容を記述するデータ信号を提供するように通信インターフェースを準備するように信号を送信することによって構成され得る。通信インターフェースは、通信インターフェースに送信される1つまたは複数のコマンドまたは信号を介してアクセスされ得る。
本開示はまた、本明細書の動作を実行するためのシステムに関する。本システムは、必要とされる目的のために特別に構築されてもよいし、コンピュータに格納されたコンピュータプログラムによって選択的に起動または再構成される汎用コンピュータを備えてもよい。そのようなコンピュータプログラムは、限定されないが、フロッピーディスク、光ディスク、CDROM、および磁気光学ディスク、読み取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、EPROM、EEPROM、磁気カードもしくは光カード、またはコンピュータシステムバスにそれぞれ接続される電子命令を格納するのに適した任意の種類の媒体を含む任意のタイプのディスクなどのコンピュータ可読記憶媒体に格納されてもよい。
本開示の実施形態は、コンピュータ実行可能命令で実装されてもよい。コンピュータ実行可能命令は、1つまたは複数のコンピュータ実行可能コンポーネントまたはモジュールに編成されてもよい。本開示の態様は、そのようなコンポーネントまたはモジュールの任意の数および編成で実装されてもよい。例えば、本開示の態様は、特定のコンピュータ実行可能命令、または図示され、かつ本明細書で説明される特定のコンポーネントもしくはモジュールに限定されない。他の実施形態は、本明細書で図示および説明されるよりも多いまたは少ない機能を有する異なるコンピュータ実行可能命令またはコンポーネントを含むことができる。
本明細書の書面による説明および方法に基づくコンピュータプログラムは、ソフトウェア開発者のスキルの範囲内にある。様々なプログラミング技法を使用して、様々なプログラムまたはプログラムモジュールを作成できる。例えば、プログラムセクションまたはプログラムモジュールは、JavaScript、Scala、Python、Java(
登録商標)、C、C++、アセンブリ言語、または任意のそのようなプログラミング言語、ならびにデータ符号化言語(XML、JSONなど)、クエリ言語(SQLなど)、プレゼンテーション関連言語(HTML、CSSなど)およびデータ変換言語(XSLなど)を使用して設計され得る。そのようなソフトウェアセクションまたはモジュールのうちの1つまたは複数を、コンピュータシステム、非一時的なコンピュータ可読媒体、または既存の通信ソフトウェアに組み込むことができる。
登録商標)、C、C++、アセンブリ言語、または任意のそのようなプログラミング言語、ならびにデータ符号化言語(XML、JSONなど)、クエリ言語(SQLなど)、プレゼンテーション関連言語(HTML、CSSなど)およびデータ変換言語(XSLなど)を使用して設計され得る。そのようなソフトウェアセクションまたはモジュールのうちの1つまたは複数を、コンピュータシステム、非一時的なコンピュータ可読媒体、または既存の通信ソフトウェアに組み込むことができる。
「含む(comprising)」、「持つ(having)」、「含む(containing)」、「含む(including)」、および他の同様の形の単語は、これらの単語のいずれか1つに続く1つまたは複数の項目が、このような1つまたは複数の項目の限定的な列挙を意味していない、または列挙された1つまたは複数の項目にのみ限定されることを意味していないという点で、意味において均等であり、非限定的であるとして解釈されることが意図されている。加えて、単数形「a」、「an」、および「the」は、文脈上明らかな別段の指示のない限り、複数の指示対象を含むことが意図されている。
実施形態の態様を詳細に説明してきたが、添付の特許請求の範囲で定義される本発明の態様の範囲から逸脱することなく修正および変形が可能であることは明らかである。本発明の態様の範囲から逸脱することなく、上記の構造、製品、および方法に様々な変更を加えることができるため、上記の説明に含まれ、添付の図面に示されているすべての事項は、限定的な意味ではなく例示的な意味で解釈されるものとすることが意図されている。
技術的背景
ウェブサイトホスティングおよびウェブサイト構築システムのためのオンデマンドウェブサーバ実行インスタンス
もくじ
ウェブサイトおよびステートレスサービングアーキテクチャ 1
本発明のシステム 2
従来のシステムおよび本発明のシステムのユースシナリオ 3
WBSコンテキストにおける本発明のシステムの使用 5
使用されている頭字語 6
ウェブサイトホスティングおよびウェブサイト構築システムのためのオンデマンドウェブサーバ実行インスタンス
もくじ
ウェブサイトおよびステートレスサービングアーキテクチャ 1
本発明のシステム 2
従来のシステムおよび本発明のシステムのユースシナリオ 3
WBSコンテキストにおける本発明のシステムの使用 5
使用されている頭字語 6
ウェブサイトおよびステートレスサービングアーキテクチャ
1.ユーザがウェブサイトと対話する場合、ユーザは、通常、BEコードやウェブサーバとやり取りするのではなく、クライアントサイドページ、ウェブアプリケーション、およびクライアントマシン/ブラウザで実行されるFEコードと多くの時間対話する。しかしながら、このクライアントサイドのウェブサイト/アプリケーションは、依然として複数のHTTP(または他の)サーバ要求を行う。これらには、例えば次のものが含まれ得る。
1.1.ページをロードするために行われた最初のHTTP要求。これは、さらなるHTTP要求をトリガして、さらなるページ要素(含まれている画像やスクリプトなど)をロードし得る。
1.2.セッション中のHTTP要求。例えば、フィールドのための値を選択するとき、ページはHTTP要求を行って、所与のフィールドのための1セットの可能な値を取得する。
1.3.ユーザが入力したフォームの送信など、データ関連のHTTP要求。
1.4.BE機能をアクティブ化するBE関連のHTTP要求。これは、ウェブサイトを提供するシステムまたは外部(サードパーティ)ウェブサービスを使用して実行され得る。
2.このコンテキストにおける「サーバ」は、実際の物理サーバを指す場合もあるが、
VMやコンテナ(ドッカーとしても知られる)などの他のウェブサイトサーバ実行インスタンスを指す場合もある。本文書を通して説明されているHTTP要求はまた、HTTPS要求または任意の他のネットワーク要求を指す場合もある。
3.ユーザは、要求を行ってから最初の応答を受信するまでのシステム(クライアント+サーバ+通信媒体)の応答が非常に迅速であることを期待している。応答時間は、多くの場合、「要求を受信してから最初の応答バイトを送信するまでのサーバサイドの時間」として測定される(通常は100ミリ秒以下と期待される)。サーバサイドの時間の測定を用いるのは、変動しやすいネットワーク転送時間を考慮から外すためである。
4.実際に応答を完了するには、かなりのさらなる時間がかかる場合がある。例えば、新しいページをロードするとき、ユーザはブラウザにページがすぐに表示され始めることを期待するが、ページのロードにはかなりのさらなる時間がかかる場合があり、ユーザはページが完全にロードされていなくてもページの操作を開始する場合もある。
5.これらに対してサーバシステム(通常は複数のサーバまたはサーバファームで構成される)は、ステートレスまたはステートフルシステム/プロトコルを使用して応答し得る。HTTPプロトコルは本質的にステートレスであるが、ステートフルサーバの使用はプロトコル外の技法(URLの書き換えや非表示のフォームフィールドなど)を使用して実装され得ることに留意されたい。
6.ステートフルシステムは、通常、クライアントが事前に割り当てられたサーバとやり取りするときに使用される。このようなサーバは連続的なセッションコンテキストを提供できるが、この構成をスケールアップするのは非常に困難である。なぜなら、サーバが(1人または複数の)ユーザに連続的に関連付けられている必要があり、次のHTTP要求の到着を待機してアイドル状態または部分的にアイドル状態になり得るためである。
7.ステートレスシステムでは、各HTTP要求は、単一のページからのものでさえも、異なるサーバ(またはサーバ実行インスタンス)によって処理され得る。異なるHTTP要求に対する異なるサーバ間での「ジャンプ」はユーザに気づかれることはなく、これらの異なるサーバは、応答に必要な外部リソース(データベースサーバなど)に透過的にアクセスできる。
8.ステートレスシステム、すなわちステートレスサーバを使用するシステムには多くの利点がある。特に、到来する要求はシステム内の任意の(ステートレス)サーバに差し向けられるために、システムは高度にスケーラブルであり、切れた接続に対して特別な処理を行う必要はない。
9.既存のシステムの(複数の)ステートレスサーバは完全に交換可能である必要があるため、特定のウェブサイトまたは関連するページに適合させることはできない。よって、このような構成は、単純で静的なウェブサイトに適している。サイト固有のBEコード(場合によりユーザ提供コードを含む)、サイト固有のコンポーネント、またはサイト固有のプラグインを必要とする複雑なウェブサイトを提供する場合、この構成はうまく機能しない。
1.ユーザがウェブサイトと対話する場合、ユーザは、通常、BEコードやウェブサーバとやり取りするのではなく、クライアントサイドページ、ウェブアプリケーション、およびクライアントマシン/ブラウザで実行されるFEコードと多くの時間対話する。しかしながら、このクライアントサイドのウェブサイト/アプリケーションは、依然として複数のHTTP(または他の)サーバ要求を行う。これらには、例えば次のものが含まれ得る。
1.1.ページをロードするために行われた最初のHTTP要求。これは、さらなるHTTP要求をトリガして、さらなるページ要素(含まれている画像やスクリプトなど)をロードし得る。
1.2.セッション中のHTTP要求。例えば、フィールドのための値を選択するとき、ページはHTTP要求を行って、所与のフィールドのための1セットの可能な値を取得する。
1.3.ユーザが入力したフォームの送信など、データ関連のHTTP要求。
1.4.BE機能をアクティブ化するBE関連のHTTP要求。これは、ウェブサイトを提供するシステムまたは外部(サードパーティ)ウェブサービスを使用して実行され得る。
2.このコンテキストにおける「サーバ」は、実際の物理サーバを指す場合もあるが、
VMやコンテナ(ドッカーとしても知られる)などの他のウェブサイトサーバ実行インスタンスを指す場合もある。本文書を通して説明されているHTTP要求はまた、HTTPS要求または任意の他のネットワーク要求を指す場合もある。
3.ユーザは、要求を行ってから最初の応答を受信するまでのシステム(クライアント+サーバ+通信媒体)の応答が非常に迅速であることを期待している。応答時間は、多くの場合、「要求を受信してから最初の応答バイトを送信するまでのサーバサイドの時間」として測定される(通常は100ミリ秒以下と期待される)。サーバサイドの時間の測定を用いるのは、変動しやすいネットワーク転送時間を考慮から外すためである。
4.実際に応答を完了するには、かなりのさらなる時間がかかる場合がある。例えば、新しいページをロードするとき、ユーザはブラウザにページがすぐに表示され始めることを期待するが、ページのロードにはかなりのさらなる時間がかかる場合があり、ユーザはページが完全にロードされていなくてもページの操作を開始する場合もある。
5.これらに対してサーバシステム(通常は複数のサーバまたはサーバファームで構成される)は、ステートレスまたはステートフルシステム/プロトコルを使用して応答し得る。HTTPプロトコルは本質的にステートレスであるが、ステートフルサーバの使用はプロトコル外の技法(URLの書き換えや非表示のフォームフィールドなど)を使用して実装され得ることに留意されたい。
6.ステートフルシステムは、通常、クライアントが事前に割り当てられたサーバとやり取りするときに使用される。このようなサーバは連続的なセッションコンテキストを提供できるが、この構成をスケールアップするのは非常に困難である。なぜなら、サーバが(1人または複数の)ユーザに連続的に関連付けられている必要があり、次のHTTP要求の到着を待機してアイドル状態または部分的にアイドル状態になり得るためである。
7.ステートレスシステムでは、各HTTP要求は、単一のページからのものでさえも、異なるサーバ(またはサーバ実行インスタンス)によって処理され得る。異なるHTTP要求に対する異なるサーバ間での「ジャンプ」はユーザに気づかれることはなく、これらの異なるサーバは、応答に必要な外部リソース(データベースサーバなど)に透過的にアクセスできる。
8.ステートレスシステム、すなわちステートレスサーバを使用するシステムには多くの利点がある。特に、到来する要求はシステム内の任意の(ステートレス)サーバに差し向けられるために、システムは高度にスケーラブルであり、切れた接続に対して特別な処理を行う必要はない。
9.既存のシステムの(複数の)ステートレスサーバは完全に交換可能である必要があるため、特定のウェブサイトまたは関連するページに適合させることはできない。よって、このような構成は、単純で静的なウェブサイトに適している。サイト固有のBEコード(場合によりユーザ提供コードを含む)、サイト固有のコンポーネント、またはサイト固有のプラグインを必要とする複雑なウェブサイトを提供する場合、この構成はうまく機能しない。
本発明のシステム
10.本明細書で説明されるように、本発明のシステムは、(サイトのための特定のプラグインおよびサーバサイドのユーザ提供コードを含む)特定のサイトのために構成されたウェブサーバインスタンスを実行し、かつこの実行を、タイムアウトなしで、またユーザが許容できる合計時間枠内でHTTP要求に応答するのに十分な速さで行う、ドッカーコンテナ(またはウェブサイトサーバ実行インスタンス)の高速ブートを含む。
11.通常、新しい仮想マシンの起動には数分かかる。新しいドッカーコンテナの起動には依然として2~3秒かかる。これらの時間は両方とも許容可能ではない。
12.本開示のシステムでは、すべての関連するサイト固有ではないコードを含むがユーザ/サイト固有のコードを含まないスタンバイコンテナのプールが提供され得る。
13.本システムは、特定のウェブサイトのためのサーバに接続する要求をライブポートでリッスンし得る。特定のウェブサイトに関連付けられているライブコンテナがある場
合、本システムはそれに接続し得る。それ以外の場合は、上記プールからのスタンバイコンテナを使用し、要求されたサイト固有のコンテンツをプールに投入するか、そのようなコンテンツをロードするように命令することができる。所与のサイトのためのサイト固有のコンテンツがロードされると、コンテナは所与のサイトに関連付けられたコンテナのプールに加わる。
14.このようなステートレスコンテナインスタンスは、HTTP要求をロードしている元のページを処理したインスタンスとなることなく、特定のHTTP要求(例えば、データ確認を含む)を処理することができることに留意されたい。
15.投入されたサイトレベルのコンテンツは、実際のサイトページを含んでいても含んでいなくてもよい。このようなサイトページ情報は、例えば次のとおりであり得る。
15.1.実際のブラウザ対応のページマテリアル(例えば、HTML、CSS、およびJSコードのコレクション)。
15.2.クライアントサイドまたはサーバサイドのコード(WBSビューアモジュールなど)によってブラウザ対応マテリアルに変換される基礎となるサイト定義データ(例えば、XMLファイルまたはJSON表現)。
15.3.フロントエンド/バックエンドコード、例えば、クライアント、サーバ、またはその両方で実行するためにページによって呼び出されるJavaScriptコード。
16.サイトが所与の期間(15分など)アクティブでない場合、本システムはスタンバイコンテナをドロップし得る。
17.ユーザの状態を保持し、ユーザが(連続的なコンテキストを有する)単一のセッション内で作業しているというユーザの感覚を保つために、クライアントサイドストレージ(例えば、ブラウザのローカルストレージ、クッキーなど)とサーバサイドのストレージ(例えば、サーバDBへの保存)との組み合わせを使用して永続的コンテキストが保持される。
10.本明細書で説明されるように、本発明のシステムは、(サイトのための特定のプラグインおよびサーバサイドのユーザ提供コードを含む)特定のサイトのために構成されたウェブサーバインスタンスを実行し、かつこの実行を、タイムアウトなしで、またユーザが許容できる合計時間枠内でHTTP要求に応答するのに十分な速さで行う、ドッカーコンテナ(またはウェブサイトサーバ実行インスタンス)の高速ブートを含む。
11.通常、新しい仮想マシンの起動には数分かかる。新しいドッカーコンテナの起動には依然として2~3秒かかる。これらの時間は両方とも許容可能ではない。
12.本開示のシステムでは、すべての関連するサイト固有ではないコードを含むがユーザ/サイト固有のコードを含まないスタンバイコンテナのプールが提供され得る。
13.本システムは、特定のウェブサイトのためのサーバに接続する要求をライブポートでリッスンし得る。特定のウェブサイトに関連付けられているライブコンテナがある場
合、本システムはそれに接続し得る。それ以外の場合は、上記プールからのスタンバイコンテナを使用し、要求されたサイト固有のコンテンツをプールに投入するか、そのようなコンテンツをロードするように命令することができる。所与のサイトのためのサイト固有のコンテンツがロードされると、コンテナは所与のサイトに関連付けられたコンテナのプールに加わる。
14.このようなステートレスコンテナインスタンスは、HTTP要求をロードしている元のページを処理したインスタンスとなることなく、特定のHTTP要求(例えば、データ確認を含む)を処理することができることに留意されたい。
15.投入されたサイトレベルのコンテンツは、実際のサイトページを含んでいても含んでいなくてもよい。このようなサイトページ情報は、例えば次のとおりであり得る。
15.1.実際のブラウザ対応のページマテリアル(例えば、HTML、CSS、およびJSコードのコレクション)。
15.2.クライアントサイドまたはサーバサイドのコード(WBSビューアモジュールなど)によってブラウザ対応マテリアルに変換される基礎となるサイト定義データ(例えば、XMLファイルまたはJSON表現)。
15.3.フロントエンド/バックエンドコード、例えば、クライアント、サーバ、またはその両方で実行するためにページによって呼び出されるJavaScriptコード。
16.サイトが所与の期間(15分など)アクティブでない場合、本システムはスタンバイコンテナをドロップし得る。
17.ユーザの状態を保持し、ユーザが(連続的なコンテキストを有する)単一のセッション内で作業しているというユーザの感覚を保つために、クライアントサイドストレージ(例えば、ブラウザのローカルストレージ、クッキーなど)とサーバサイドのストレージ(例えば、サーバDBへの保存)との組み合わせを使用して永続的コンテキストが保持される。
従来のシステムおよび本発明のシステムのユースシナリオ
18.次の典型的なユースシナリオを仮定する。
18.1.ユーザがブラウザにURLページを入力し、ページのロードを要求する。ロードされたページは、データ入力フォームを含み、かなりの量の関連する(サイトレベル固有の)FEおよびBEコードを有する。ページおよびそのサイトレベルで関連付けられたFEコードを取得するために、HTTP要求がサーバに対して行われる一方で、BEコードはサーバにロードされるが、クライアントには送信されない。サイトはまた、独自のUI、FEコード、およびBEコードを持ついくつかのコンポーネント(ディスプレイウィジェットなど)を使用する。
18.2.ユーザは10分間にわたってフォームに入力し、通常、<form>HTMLタグを有するローカルページを実行するブラウザでローカルに作業する。これはまた、Ajax呼び出しまたはFetch呼び出し、またはHTTP要求を開始できるJavaScriptもしくはHTMLセットアップを使用して行うこともできる。
18.3.フォームは、サーバに送信されるいくつかの要求をこの間に行い得る(例えば、所与のフィールドに関するDBからの許可された値のリストを取得する)。これらの要求のそれぞれが、実際のDBアクセスおよび情報収集を行うサーバサイドBEスクリプトをアクティブにする(例えば、コード内のDBアクセスクレデンシャルをクライアントに送信することを回避するため)。このような要求は、HTTP要求として実装されてもよいし、異なるメカニズムを使用して実装されてもよい。
18.4.ユーザがフォームを送信すると、フォームはFEスクリプトによって確認される。次いで、フォームはサーバに送信され、関連するBEコードを実行するサーバプロセスをアクティブにし、これにより(例えば)フォームがデータベースに保存され得る。
19.上記のシナリオでは、ユーザのアクティビティは、HTTP要求または他のメカ
ニズムを使用して、10分間にわたる間に(例えば)20個の要求を生成し得る。これらの要求の多くは、サイト固有のBEスクリプトまたはコンポーネント固有のBEスクリプト(サイトで使用されるコンポーネント用)をアクティブにする。
20.従来のステートレス/ステートフル技術は、このシナリオを次のように処理する。
20.1.ステートフルサーバを使用する場合、場合により中間要求(上記の「フィールドXのための値のリストを取得する」など)を処理することを除いて、何もしていなくても、10分後になる場合がある記入を終えたフォームの送信まで、フォームを含むページを最初に提供したサーバは実行し続けなければならない。
20.2.従来のステートレスサーバ技術は、(所与のサイトに固有のコードを含む)特定のHTTP要求ごとにサーバを、またはVMやコンテナでさえも適時にコールドスタートすることはできなかった。よって、特定のBE機能を持たないサイトをサポートするか、フォーム入力セッション中ずっと特定のサーバインスタンスを実行し続けなければならなかった(よって、実際にはステートレスではない)。
21.本発明の技術を使用すると、ステートレスサーバインスタンス(例えば、コンテナ)が割り当てられて、特定のHTTP要求のそれぞれ(ページのロード、フィールドXのための値のリストの取得、記入されたフォームのDBへの保存)を処理する。これにより、サーバ時間の使用量が、10分間のフォーム入力セッションの間中である代わりに、(例えば)20個の要求処理時間(例えば、20×200ミリ秒=4秒)になる。割り当てられたサーバは、(サイト固有の要素が投入された)新しいコンテナまたは既存の利用可能なサイト適応コンテナであり得る。
22.よって、同じユースシナリオにおいて、本発明のシステムでは、使用するサーバリソースを従来のシステムよりも大幅に少なくでき、サーバを必要とするのは10分ではなく(10分のほとんどの時間、サーバインスタンスはアイドル状態であるが、特定のユーザからの要求を依然として待機している)4秒だけである。
23.これにより、ウェブサイトホスティングプロバイダは、非常に少量のリソース(サーバ、コンテナなど)を使用して同じレベルのサービスを提供できる。
24.ちなみに、ユーザはフォームに対してローカルで作業しているため、ユーザがブラウザウィンドウを閉じて再び開くと、通常は(部分的に入力されたフォームではなく)空のフォームが表示される。本発明のシステムは、フォームのコンテンツをブラウザのローカルストレージに保持できるAPIを提供し得る。よって、ユーザが部分的に入力されたフォームウィンドウを閉じて再び開くと、再び開かれたフォームには以前に入力された値が含まれる。これはまた、ブラウザが完全に閉じている場合にも機能する。
25.同様に、BEタスクは、例えば、(サーバサイドの)サーバDBにコンテキスト情報を保存することにより、またはクライアントにより維持され、かつ後続のBE呼び出しに渡される情報を提供することにより、相互にコンテキスト情報を依然として提供できる。このような情報は、セッション期間のみであっても、(例えば、ブラウザのローカルストレージを使用して)必要に応じて存在し続けるのであってもよい。
26.また、特定のコンポーネントコードおよび関連するFE/BEスクリプトの投入は、通常、特定のページレベルの粒度ではなくサイト全体(すなわち、サイト内のすべてのページで使用されるすべての特別なコンポーネントおよびスクリプト)に対して行われることにも留意されたい。このように、このサイトに関する新しいHTTP要求が(同じユーザまたは他のユーザから)到着するたびに、投入されたコンテナがサイト内のあらゆるページで再利用され得る。
27.しかしながら、本システムは、一方では投入される「マテリアル」の量に応じて、他方ではその使用パターンに応じて、異なるレベルの粒度を実装し得る。よって、本システムは、(例えば)ページ、ページグループ(すなわち、サイトセクション)、サイト、またはサイトグループの投入粒度レベルを実装し得る。例えば、多数のサイトが非常に類似しており、共通の関連コンポーネントおよびスクリプトを使用する場合、サイトグループのケースが関連し得る。このように、サイトグループに固有のコンテンツが投入され
たコンテナを再利用して、1つのサイトだけでなく、グループ内の任意のサイトへの要求を処理できる。
18.次の典型的なユースシナリオを仮定する。
18.1.ユーザがブラウザにURLページを入力し、ページのロードを要求する。ロードされたページは、データ入力フォームを含み、かなりの量の関連する(サイトレベル固有の)FEおよびBEコードを有する。ページおよびそのサイトレベルで関連付けられたFEコードを取得するために、HTTP要求がサーバに対して行われる一方で、BEコードはサーバにロードされるが、クライアントには送信されない。サイトはまた、独自のUI、FEコード、およびBEコードを持ついくつかのコンポーネント(ディスプレイウィジェットなど)を使用する。
18.2.ユーザは10分間にわたってフォームに入力し、通常、<form>HTMLタグを有するローカルページを実行するブラウザでローカルに作業する。これはまた、Ajax呼び出しまたはFetch呼び出し、またはHTTP要求を開始できるJavaScriptもしくはHTMLセットアップを使用して行うこともできる。
18.3.フォームは、サーバに送信されるいくつかの要求をこの間に行い得る(例えば、所与のフィールドに関するDBからの許可された値のリストを取得する)。これらの要求のそれぞれが、実際のDBアクセスおよび情報収集を行うサーバサイドBEスクリプトをアクティブにする(例えば、コード内のDBアクセスクレデンシャルをクライアントに送信することを回避するため)。このような要求は、HTTP要求として実装されてもよいし、異なるメカニズムを使用して実装されてもよい。
18.4.ユーザがフォームを送信すると、フォームはFEスクリプトによって確認される。次いで、フォームはサーバに送信され、関連するBEコードを実行するサーバプロセスをアクティブにし、これにより(例えば)フォームがデータベースに保存され得る。
19.上記のシナリオでは、ユーザのアクティビティは、HTTP要求または他のメカ
ニズムを使用して、10分間にわたる間に(例えば)20個の要求を生成し得る。これらの要求の多くは、サイト固有のBEスクリプトまたはコンポーネント固有のBEスクリプト(サイトで使用されるコンポーネント用)をアクティブにする。
20.従来のステートレス/ステートフル技術は、このシナリオを次のように処理する。
20.1.ステートフルサーバを使用する場合、場合により中間要求(上記の「フィールドXのための値のリストを取得する」など)を処理することを除いて、何もしていなくても、10分後になる場合がある記入を終えたフォームの送信まで、フォームを含むページを最初に提供したサーバは実行し続けなければならない。
20.2.従来のステートレスサーバ技術は、(所与のサイトに固有のコードを含む)特定のHTTP要求ごとにサーバを、またはVMやコンテナでさえも適時にコールドスタートすることはできなかった。よって、特定のBE機能を持たないサイトをサポートするか、フォーム入力セッション中ずっと特定のサーバインスタンスを実行し続けなければならなかった(よって、実際にはステートレスではない)。
21.本発明の技術を使用すると、ステートレスサーバインスタンス(例えば、コンテナ)が割り当てられて、特定のHTTP要求のそれぞれ(ページのロード、フィールドXのための値のリストの取得、記入されたフォームのDBへの保存)を処理する。これにより、サーバ時間の使用量が、10分間のフォーム入力セッションの間中である代わりに、(例えば)20個の要求処理時間(例えば、20×200ミリ秒=4秒)になる。割り当てられたサーバは、(サイト固有の要素が投入された)新しいコンテナまたは既存の利用可能なサイト適応コンテナであり得る。
22.よって、同じユースシナリオにおいて、本発明のシステムでは、使用するサーバリソースを従来のシステムよりも大幅に少なくでき、サーバを必要とするのは10分ではなく(10分のほとんどの時間、サーバインスタンスはアイドル状態であるが、特定のユーザからの要求を依然として待機している)4秒だけである。
23.これにより、ウェブサイトホスティングプロバイダは、非常に少量のリソース(サーバ、コンテナなど)を使用して同じレベルのサービスを提供できる。
24.ちなみに、ユーザはフォームに対してローカルで作業しているため、ユーザがブラウザウィンドウを閉じて再び開くと、通常は(部分的に入力されたフォームではなく)空のフォームが表示される。本発明のシステムは、フォームのコンテンツをブラウザのローカルストレージに保持できるAPIを提供し得る。よって、ユーザが部分的に入力されたフォームウィンドウを閉じて再び開くと、再び開かれたフォームには以前に入力された値が含まれる。これはまた、ブラウザが完全に閉じている場合にも機能する。
25.同様に、BEタスクは、例えば、(サーバサイドの)サーバDBにコンテキスト情報を保存することにより、またはクライアントにより維持され、かつ後続のBE呼び出しに渡される情報を提供することにより、相互にコンテキスト情報を依然として提供できる。このような情報は、セッション期間のみであっても、(例えば、ブラウザのローカルストレージを使用して)必要に応じて存在し続けるのであってもよい。
26.また、特定のコンポーネントコードおよび関連するFE/BEスクリプトの投入は、通常、特定のページレベルの粒度ではなくサイト全体(すなわち、サイト内のすべてのページで使用されるすべての特別なコンポーネントおよびスクリプト)に対して行われることにも留意されたい。このように、このサイトに関する新しいHTTP要求が(同じユーザまたは他のユーザから)到着するたびに、投入されたコンテナがサイト内のあらゆるページで再利用され得る。
27.しかしながら、本システムは、一方では投入される「マテリアル」の量に応じて、他方ではその使用パターンに応じて、異なるレベルの粒度を実装し得る。よって、本システムは、(例えば)ページ、ページグループ(すなわち、サイトセクション)、サイト、またはサイトグループの投入粒度レベルを実装し得る。例えば、多数のサイトが非常に類似しており、共通の関連コンポーネントおよびスクリプトを使用する場合、サイトグループのケースが関連し得る。このように、サイトグループに固有のコンテンツが投入され
たコンテナを再利用して、1つのサイトだけでなく、グループ内の任意のサイトへの要求を処理できる。
WBSコンテキストにおける本発明のシステムの使用
28.オンラインWBSは2つの使用モードを有することを特徴とする。
28.1.サイトの編集-サイト定義(例えば、XML/JSONデータ、またはDBレコード、または実際のHTMLページマテリアル)は、通常、サーバサポートのあるブラウザで実行される視覚的エディタアプリケーションによって編集される。このようなサイトは、FEコードおよびBEコード(エディタで編集可能でもあり得る)、ならびにサイトに必要な特定のコンポーネント(例えば、サードパーティアプリケーション)を含み得る。エディタはまた、プレビューモードでサイトを呼び出すこともできる。エディタはまた、外部ユーザが使用するためにあるバージョンのサイトを公開する公開操作もサポートし得る。
28.2.RT(ランタイム)モード-必要に応じてFEまたはBEコードをアクティブにしながら、システムがユーザに公開されたサイトを提供する。
29.上述の本発明のシステムは、システムの編集モードおよびRTモードの両方で使用され得る。
30.編集モードで動作する場合。
30.1.編集されたサイトコンテキストは以下を含む。
30.1.1.完全なサイト定義(ページ、コンポーネント、および関連データ)は、通常、エディタクライアントによってクライアントサイドのメモリ内構造として保持される(例えば、JSON表現として)。
30.1.2.サイトのFEコード。
30.1.3.サイトのBEコード。
30.2.実際のエディタコード(クライアントにロードされるエディタFEコードおよびサーバで実行されるエディタBEコード)は、システムの(コンテナにプリロードされた「一般セクション」における)一般的なコードの一部である。
30.3.サイトのJSON/FEサイトコード/BEサイトコードはDBに保持される(ユーザが明示的に保存する場合)。
30.4.FE/BEコードの一時的な保存は限られているため、ユーザは「移動」先のコンテナを介して同じコードの編集を続行できる。このことは、サイトのFE/BEコードはサイトのJSONコードの一部ではないために必要とされる。
31.プレビューを実行するときに使用することができ、さらにエディタが(大きい場合がある)サイトコード全体をロードしなくてもよいように、サイトコードはDBに保持されるが、編集中または現在のページに関連する関連セクションのみであることに留意されたい。
32.ランタイムモードで動作する場合、本システムは通常のウェブサイトの提供について上述したように動作する。WBSは、(WBSで編集されるすべてのサイトで必要とされる)ビューアモジュールを有することができ、このようなモジュールは、起動されたサーバ/コンテナインスタンスにプリロードされたシステムの一般的なコードの一部である。
33.よって、本発明のシステムは、編集およびRTの両方でWBSにより使用され得る。
28.オンラインWBSは2つの使用モードを有することを特徴とする。
28.1.サイトの編集-サイト定義(例えば、XML/JSONデータ、またはDBレコード、または実際のHTMLページマテリアル)は、通常、サーバサポートのあるブラウザで実行される視覚的エディタアプリケーションによって編集される。このようなサイトは、FEコードおよびBEコード(エディタで編集可能でもあり得る)、ならびにサイトに必要な特定のコンポーネント(例えば、サードパーティアプリケーション)を含み得る。エディタはまた、プレビューモードでサイトを呼び出すこともできる。エディタはまた、外部ユーザが使用するためにあるバージョンのサイトを公開する公開操作もサポートし得る。
28.2.RT(ランタイム)モード-必要に応じてFEまたはBEコードをアクティブにしながら、システムがユーザに公開されたサイトを提供する。
29.上述の本発明のシステムは、システムの編集モードおよびRTモードの両方で使用され得る。
30.編集モードで動作する場合。
30.1.編集されたサイトコンテキストは以下を含む。
30.1.1.完全なサイト定義(ページ、コンポーネント、および関連データ)は、通常、エディタクライアントによってクライアントサイドのメモリ内構造として保持される(例えば、JSON表現として)。
30.1.2.サイトのFEコード。
30.1.3.サイトのBEコード。
30.2.実際のエディタコード(クライアントにロードされるエディタFEコードおよびサーバで実行されるエディタBEコード)は、システムの(コンテナにプリロードされた「一般セクション」における)一般的なコードの一部である。
30.3.サイトのJSON/FEサイトコード/BEサイトコードはDBに保持される(ユーザが明示的に保存する場合)。
30.4.FE/BEコードの一時的な保存は限られているため、ユーザは「移動」先のコンテナを介して同じコードの編集を続行できる。このことは、サイトのFE/BEコードはサイトのJSONコードの一部ではないために必要とされる。
31.プレビューを実行するときに使用することができ、さらにエディタが(大きい場合がある)サイトコード全体をロードしなくてもよいように、サイトコードはDBに保持されるが、編集中または現在のページに関連する関連セクションのみであることに留意されたい。
32.ランタイムモードで動作する場合、本システムは通常のウェブサイトの提供について上述したように動作する。WBSは、(WBSで編集されるすべてのサイトで必要とされる)ビューアモジュールを有することができ、このようなモジュールは、起動されたサーバ/コンテナインスタンスにプリロードされたシステムの一般的なコードの一部である。
33.よって、本発明のシステムは、編集およびRTの両方でWBSにより使用され得る。
使用されている頭字語
BE:バックエンド
FE:フロントエンド
VM:仮想マシン
WBS:ウェブサイト構築システム
BE:バックエンド
FE:フロントエンド
VM:仮想マシン
WBS:ウェブサイト構築システム
ホーム>Wixコード>Wixコードの基本
サイト構造サイドバーを使う
Wixコードリソースセンターにアクセスし、さらに学びましょう。
サイト構造サイドバーには、ページ、ライトボックス、ファイル、データベースコレクションなど、サイトを構成するすべてのファイルが表示されます。このサイドバーを使用すると、以下に詳述するように、サイトに影響を与える様々なアクションを実行できます。
・サイドバーを非表示にするには、エディタの左下にある非表示アイコンをクリックします。
・サイドバーを表示するには、エディタの左下にある表示アイコンをクリックします。
サイト構造サイドバーを使う
Wixコードリソースセンターにアクセスし、さらに学びましょう。
サイト構造サイドバーには、ページ、ライトボックス、ファイル、データベースコレクションなど、サイトを構成するすべてのファイルが表示されます。このサイドバーを使用すると、以下に詳述するように、サイトに影響を与える様々なアクションを実行できます。
・サイドバーを非表示にするには、エディタの左下にある非表示アイコンをクリックします。
・サイドバーを表示するには、エディタの左下にある表示アイコンをクリックします。
ページ
サイドバーのページセクションには、サイトの通常ページ、動的ページ、およびルータページのすべてが一覧表示されます。通常ページは、ページセクションのタイトルのすぐ下に表示されます。動的ページおよびルータページはサブグループに表示されます。
サイドバーのページセクションには、サイトの通常ページ、動的ページ、およびルータページのすべてが一覧表示されます。通常ページは、ページセクションのタイトルのすぐ下に表示されます。動的ページおよびルータページはサブグループに表示されます。
通常ページ
サイトの通常ページは、ページセクションのタイトルのすぐ下に表示されます。ページの設定を変更するには、ページ名にカーソルを合わせると表示される設定アイコンをクリックします。サイトのホームページ以外の任意のページを動的ページとして設定できます。
サイトの通常ページは、ページセクションのタイトルのすぐ下に表示されます。ページの設定を変更するには、ページ名にカーソルを合わせると表示される設定アイコンをクリックします。サイトのホームページ以外の任意のページを動的ページとして設定できます。
動的ページ
新しい動的ページをグループに追加するには、セクション名にカーソルを合わせると表
示される設定アイコンをクリックします。
URLやSEOデータなどのページの設定を変更するには、動的ページ名にカーソルを合わせると表示される設定アイコンをクリックして、動的接続を除去して動的ページを通常ページにするか、動的ページを削除します。
新しい動的ページをグループに追加するには、セクション名にカーソルを合わせると表
示される設定アイコンをクリックします。
URLやSEOデータなどのページの設定を変更するには、動的ページ名にカーソルを合わせると表示される設定アイコンをクリックして、動的接続を除去して動的ページを通常ページにするか、動的ページを削除します。
ルータページ
ルータを作成してある場合、そのルータのプレフィックスに関連付けられているすべてのページが一緒に同じセクションにグループ化されます。例えば、myrouterというプレフィックスでルータを作成した場合、セクションの名前はMyrouter Pages(Router)になります。
個々のルータページには、ルータのコードで使用されるデフォルト名が付けられます。必要に応じて名前を変更できます。ページ名はページ訪問者には見えません。
ルータのプレフィックスおよびrouters.jsファイルに実装されている関連する関数の名前を変更するには、または新しいページをルータに追加するには、ルータセクション名にカーソルを合わせたときに表示される設定アイコンをクリックします。
ページの設定を変更したり、名前を変更したり、削除したり、ルータから除去して通常のページにするには、ルータページ名にカーソルを合わせたときに表示される設定アイコンをクリックします。
新しいルータを追加するには、ページセクションヘッダにカーソルを合わせると表示されるプラスアイコンをクリックします。
ルータを作成してある場合、そのルータのプレフィックスに関連付けられているすべてのページが一緒に同じセクションにグループ化されます。例えば、myrouterというプレフィックスでルータを作成した場合、セクションの名前はMyrouter Pages(Router)になります。
個々のルータページには、ルータのコードで使用されるデフォルト名が付けられます。必要に応じて名前を変更できます。ページ名はページ訪問者には見えません。
ルータのプレフィックスおよびrouters.jsファイルに実装されている関連する関数の名前を変更するには、または新しいページをルータに追加するには、ルータセクション名にカーソルを合わせたときに表示される設定アイコンをクリックします。
ページの設定を変更したり、名前を変更したり、削除したり、ルータから除去して通常のページにするには、ルータページ名にカーソルを合わせたときに表示される設定アイコンをクリックします。
新しいルータを追加するには、ページセクションヘッダにカーソルを合わせると表示されるプラスアイコンをクリックします。
ライトボックス
サイトのページにライトボックスを追加してある場合、サイドバーのライトボックスセクションに表示されます。このセクションは、サイトに少なくとも1つのライトボックスを追加した場合にのみ表示されます。
新しいライトボックスを追加するには、エディタの[追加]メニューを使用します。
サイドバーで既存のライトボックスを選択すると、エディタはライトボックスモードに入ります。
サイドバーのパブリックセクションには、サイトからパブリックにアクセスできるファイルが含まれます。パブリックで使用するJavaScriptファイルおよびテキストファイルを作成することができ、これらのファイルをフォルダに整理できます。ページおよびサイトコードもパブリックにアクセス可能ですが、パブリックセクションには表示されません。
ページおよびサイトコードを編集するには、コードパネルを使用します。
新しいファイルまたはフォルダをパブリックセクションに追加するには、セクション名にカーソルを合わせると表示されるプラスアイコンをクリックします。
新しいファイルや新しいフォルダを追加したり、フォルダを削除したりするには、フォルダ名にカーソルを合わせると表示される設定アイコンをクリックします。
ファイル名を変更したりファイルを削除したりするには、ファイル名にカーソルを合わせると表示される設定アイコンをクリックします。
サイトのページにライトボックスを追加してある場合、サイドバーのライトボックスセクションに表示されます。このセクションは、サイトに少なくとも1つのライトボックスを追加した場合にのみ表示されます。
新しいライトボックスを追加するには、エディタの[追加]メニューを使用します。
サイドバーで既存のライトボックスを選択すると、エディタはライトボックスモードに入ります。
サイドバーのパブリックセクションには、サイトからパブリックにアクセスできるファイルが含まれます。パブリックで使用するJavaScriptファイルおよびテキストファイルを作成することができ、これらのファイルをフォルダに整理できます。ページおよびサイトコードもパブリックにアクセス可能ですが、パブリックセクションには表示されません。
ページおよびサイトコードを編集するには、コードパネルを使用します。
新しいファイルまたはフォルダをパブリックセクションに追加するには、セクション名にカーソルを合わせると表示されるプラスアイコンをクリックします。
新しいファイルや新しいフォルダを追加したり、フォルダを削除したりするには、フォルダ名にカーソルを合わせると表示される設定アイコンをクリックします。
ファイル名を変更したりファイルを削除したりするには、ファイル名にカーソルを合わせると表示される設定アイコンをクリックします。
バックエンド
サイドバーのバックエンドセクションには、サイトからパブリックにアクセスできないファイルが一覧表示されます。バックエンドセクションは、サーバサイドで実行するコードを配置する場所です。バックエンドで使用するJavaScriptファイル、ウェブモジュール、およびテキストファイルを作成することができ、これらのファイルをフォルダに整理できます。
サイトのバックエンドセクションには、2つの特別なJavaScriptファイルが存在する場合があります。data.jsファイルにはデータフックのためのコードが含まれ、routers.jsファイルにはルータおよびデータバインディングルータフッ
クのためのコードが含まれます。
新しいファイルまたはフォルダをバックエンドセクションに追加するには、セクション名にカーソルを合わせると表示されるプラスアイコンをクリックします。
新しいファイルや新しいフォルダを追加したり、フォルダを削除したりするには、フォルダ名にカーソルを合わせると表示される設定アイコンをクリックします。
ファイル名を変更したりファイルを削除したりするには、ファイル名にカーソルを合わせると表示される設定アイコンをクリックします。
サイドバーのバックエンドセクションには、サイトからパブリックにアクセスできないファイルが一覧表示されます。バックエンドセクションは、サーバサイドで実行するコードを配置する場所です。バックエンドで使用するJavaScriptファイル、ウェブモジュール、およびテキストファイルを作成することができ、これらのファイルをフォルダに整理できます。
サイトのバックエンドセクションには、2つの特別なJavaScriptファイルが存在する場合があります。data.jsファイルにはデータフックのためのコードが含まれ、routers.jsファイルにはルータおよびデータバインディングルータフッ
クのためのコードが含まれます。
新しいファイルまたはフォルダをバックエンドセクションに追加するには、セクション名にカーソルを合わせると表示されるプラスアイコンをクリックします。
新しいファイルや新しいフォルダを追加したり、フォルダを削除したりするには、フォルダ名にカーソルを合わせると表示される設定アイコンをクリックします。
ファイル名を変更したりファイルを削除したりするには、ファイル名にカーソルを合わせると表示される設定アイコンをクリックします。
データベース
新しいコレクションを追加するには、セクション名にカーソルを合わせると表示されるプラスアイコンをクリックします。
コレクションに基づいて新しい動的ページを追加したり、コレクションのパーミッションを更新したり、コレクションを除去したりするには、コレクション名にカーソルを合わせると表示される設定アイコンをクリックします。
新しいコレクションを追加するには、セクション名にカーソルを合わせると表示されるプラスアイコンをクリックします。
コレクションに基づいて新しい動的ページを追加したり、コレクションのパーミッションを更新したり、コレクションを除去したりするには、コレクション名にカーソルを合わせると表示される設定アイコンをクリックします。
関連するコンテンツ
動的ページについて
ライトボックスについて
データベースコレクションについて
ルータについて
データバインディングルータフックについて
動的ページについて
ライトボックスについて
データベースコレクションについて
ルータについて
データバインディングルータフックについて
ホーム>Wixコード>Wixコードの基本
コードパネルを使う
・Wixコードリソースセンターにアクセスし、さらに学びましょう。
・この記事を全画面表示するにはここをクリックしてください。
エディタの下部に表示されるコードパネルでサイトのコードを編集します。コードパネルには、特別なツールバーとサイトの様々な要素のためのコードを含む2つのタブとがあります。また、コードを使用する方法や場所に応じて、いずれかのタブに任意の他のコードを追加することもできます。
ヒント:
コードパネルをページの下部から上にドラッグするだけで開くことができます。
エディタ内の要素は、特定のページまたはサイトのすべてのページに表示できます。特定のページのみに関連するコードを追加することも、すべてのサイトページに関連するコードを追加することもできます。コードパネルの左側にはページおよびサイトの2つのタブがあります。
・ページ:ページタブには、特定のページに表示される要素のためのコードが含まれています。プロパティパネルを使用して要素にイベントを追加すると、そのイベントのコードは自動的にページタブに配置されます。特定のページのみに関連するコードがある場合は、ここに追加します。
・サイト:ある要素がすべてのサイトページに表示され、サイト全体で一貫性のある機能をその要素に対して追加するには、そのコードをサイトタブに追加します。プロパティパネルを使用してすべてのページに表示される要素にイベントを追加すると、そのイベントのコードは自動的にサイトタブに配置されます。サイトのすべてのページに関連するコードがある場合は、ここに追加します。
すべてのページに表示される要素があり、1つのページに固有のコードをその要素に対して追加する場合は、そのページのページタブにコードを追加します。
コードパネルを使う
・Wixコードリソースセンターにアクセスし、さらに学びましょう。
・この記事を全画面表示するにはここをクリックしてください。
エディタの下部に表示されるコードパネルでサイトのコードを編集します。コードパネルには、特別なツールバーとサイトの様々な要素のためのコードを含む2つのタブとがあります。また、コードを使用する方法や場所に応じて、いずれかのタブに任意の他のコードを追加することもできます。
ヒント:
コードパネルをページの下部から上にドラッグするだけで開くことができます。
エディタ内の要素は、特定のページまたはサイトのすべてのページに表示できます。特定のページのみに関連するコードを追加することも、すべてのサイトページに関連するコードを追加することもできます。コードパネルの左側にはページおよびサイトの2つのタブがあります。
・ページ:ページタブには、特定のページに表示される要素のためのコードが含まれています。プロパティパネルを使用して要素にイベントを追加すると、そのイベントのコードは自動的にページタブに配置されます。特定のページのみに関連するコードがある場合は、ここに追加します。
・サイト:ある要素がすべてのサイトページに表示され、サイト全体で一貫性のある機能をその要素に対して追加するには、そのコードをサイトタブに追加します。プロパティパネルを使用してすべてのページに表示される要素にイベントを追加すると、そのイベントのコードは自動的にサイトタブに配置されます。サイトのすべてのページに関連するコードがある場合は、ここに追加します。
すべてのページに表示される要素があり、1つのページに固有のコードをその要素に対して追加する場合は、そのページのページタブにコードを追加します。
Wixコードの構文およびオートコンプリート
特定の要素を選択する
Wixコードでは、標準のJavaScriptを使用してコーディングできます。また、Wixコードには、ページ上の要素を選択するための特定の構文または規則のセットがあり、それは次のとおりです。
jQueryをご存知であれば見慣れたものであるはずです。ご存知でなくても、知っておくべきなのは次のことになります。
要素を選択するには、
1.$wと入力します。
2.要素名を括弧および引用符で囲みます。
3.要素名の前にハッシュタグを付けます。
注意:
引用符は、単一引用符も二重引用符も使用できます。
//すべきこと:ページに関連するコードをここに記述します。
上下の矢印キーを使用して目的の要素を選択し、Enterキーを押します。あるいは、リスト内の要素をクリックすることもできます。要素への参照は、必要なすべての構文と共にコードに追加されます。
ヒント:
・Ctrl+スペースを押せばいつでもコード補完ポップアップを表示できます。
・要素名では大文字と小文字とが区別されます。「#Button1」は「#button1」と同じではありません。
・パブリックにnew.jsファイルを追加すると、最後にアクセスしたページの要素がコード補完によりリストされます。
要素名を見るには、要素にカーソルを合わせるか要素を選択します。プロパティパネルで任意の要素の名前を変更できます。
特定の要素を選択する
Wixコードでは、標準のJavaScriptを使用してコーディングできます。また、Wixコードには、ページ上の要素を選択するための特定の構文または規則のセットがあり、それは次のとおりです。
jQueryをご存知であれば見慣れたものであるはずです。ご存知でなくても、知っておくべきなのは次のことになります。
要素を選択するには、
1.$wと入力します。
2.要素名を括弧および引用符で囲みます。
3.要素名の前にハッシュタグを付けます。
注意:
引用符は、単一引用符も二重引用符も使用できます。
//すべきこと:ページに関連するコードをここに記述します。
上下の矢印キーを使用して目的の要素を選択し、Enterキーを押します。あるいは、リスト内の要素をクリックすることもできます。要素への参照は、必要なすべての構文と共にコードに追加されます。
ヒント:
・Ctrl+スペースを押せばいつでもコード補完ポップアップを表示できます。
・要素名では大文字と小文字とが区別されます。「#Button1」は「#button1」と同じではありません。
・パブリックにnew.jsファイルを追加すると、最後にアクセスしたページの要素がコード補完によりリストされます。
要素名を見るには、要素にカーソルを合わせるか要素を選択します。プロパティパネルで任意の要素の名前を変更できます。
特定の種類のすべての要素を選択する
特定の種類のすべての要素を選択するには、次のように、ハッシュタグなしで要素の種類名を使用します。
要素の種類名は、WixコードAPIに表示される要素名です。
特定の種類のすべての要素を選択するには、次のように、ハッシュタグなしで要素の種類名を使用します。
要素の種類名は、WixコードAPIに表示される要素名です。
JavaScriptテンプレート
Wixコードに直接関連するオートコンプリートに加えて、コードパネルには標準のJavaScriptテンプレートおよびキーワードのためのオートコンプリートも含まれています。例えば、「for」という単語を入力すると、オートコンプリートリストには「for文」のテンプレートおよび「for」というキーワードが含まれます。各テンプレートには、標準JavaScript APIへのリンクが含まれており、そこで詳細な情報を参照できます。
JavaScriptテンプレートを選択すると、テンプレートの完全な構文がコードパネルに追加されます。例えば、「for文」を選択すると、次のテンプレートがコードに追加されます。
後は、ループ内で実行するコードを追加するだけです。
Wixコードに直接関連するオートコンプリートに加えて、コードパネルには標準のJavaScriptテンプレートおよびキーワードのためのオートコンプリートも含まれています。例えば、「for」という単語を入力すると、オートコンプリートリストには「for文」のテンプレートおよび「for」というキーワードが含まれます。各テンプレートには、標準JavaScript APIへのリンクが含まれており、そこで詳細な情報を参照できます。
JavaScriptテンプレートを選択すると、テンプレートの完全な構文がコードパネルに追加されます。例えば、「for文」を選択すると、次のテンプレートがコードに追加されます。
後は、ループ内で実行するコードを追加するだけです。
参照する前に要素が読み込まれていることを確認する
>onReadyに関する高度な情報
ページがブラウザに読み込まれると、ページの読み込みが終わる前にページのコードが実行される場合があります。その場合、ページが読み込まれる前にコードがページ内の要素を参照しようとしたときにエラーが発生する可能性があります。
//すべきこと:ページに関連するコードをここに記述します。
これが必要になるのは、$wセレクタを使用して独自にコードを追加する場合だけです。プロパティパネルを使用して関数に追加したコードは、ページが読み込まれた後にのみ実行されます。
>onReadyに関する高度な情報
ページがブラウザに読み込まれると、ページの読み込みが終わる前にページのコードが実行される場合があります。その場合、ページが読み込まれる前にコードがページ内の要素を参照しようとしたときにエラーが発生する可能性があります。
//すべきこと:ページに関連するコードをここに記述します。
これが必要になるのは、$wセレクタを使用して独自にコードを追加する場合だけです。プロパティパネルを使用して関数に追加したコードは、ページが読み込まれた後にのみ実行されます。
要素を使う
エディタ内のすべての要素には、プロパティ、メソッド、およびイベントハンドラがあり、これらを使用して、要素を使ったり、サイトに機能を追加したりできます。
要素を選択した後にピリオドを入力すると、これらのアイテムの全一覧が表示されます。
//すべきこと:ページに関連するコードをここに記述します。
上下の矢印キーを使用して目的のアイテムを選択し、Enterキーを押します。必要な構文が要素セレクタの後に追加されます。オプションの下には、機能の簡単な説明が表示されます。「続きを読む」リンクをクリックすると、さらなる情報が表示されます。
オートコンプリートポップアップには、要素で呼び出すことができる標準のJavaScriptメソッドも含まれています。
エディタ内のすべての要素には、プロパティ、メソッド、およびイベントハンドラがあり、これらを使用して、要素を使ったり、サイトに機能を追加したりできます。
要素を選択した後にピリオドを入力すると、これらのアイテムの全一覧が表示されます。
//すべきこと:ページに関連するコードをここに記述します。
上下の矢印キーを使用して目的のアイテムを選択し、Enterキーを押します。必要な構文が要素セレクタの後に追加されます。オプションの下には、機能の簡単な説明が表示されます。「続きを読む」リンクをクリックすると、さらなる情報が表示されます。
オートコンプリートポップアップには、要素で呼び出すことができる標準のJavaScriptメソッドも含まれています。
プロパティ
プロパティには、要素に関する情報が含まれています。これらの一部は読み取り専用ですが、値を設定できるものもあります。
例えば、テキスト要素にはisVisibleプロパティがあり、要素が実際に画面上に表示されるか否かを返します。このプロパティは読み取り専用です。テキスト要素には、テキスト要素の現在のテキストを含むtextプロパティもあります。これは、読み取りおよび設定の両方が可能なプロパティです。
プロパティには、要素に関する情報が含まれています。これらの一部は読み取り専用ですが、値を設定できるものもあります。
例えば、テキスト要素にはisVisibleプロパティがあり、要素が実際に画面上に表示されるか否かを返します。このプロパティは読み取り専用です。テキスト要素には、テキスト要素の現在のテキストを含むtextプロパティもあります。これは、読み取りおよび設定の両方が可能なプロパティです。
メソッド
メソッドは、要素に対してアクションを実行します。
例えば、ボタン要素には、サイトにボタンが表示されないようにするhideメソッドがあります。
一部のメソッドには、アクションの発生の仕方に影響する追加オプションがあります。例えば、次のように括弧内で指定することにより、hideメソッドにアニメーションを追加できます。
ここでも、すべてのオプションを知るには、WixコードAPIを見る必要があります。
メソッドは、要素に対してアクションを実行します。
例えば、ボタン要素には、サイトにボタンが表示されないようにするhideメソッドがあります。
一部のメソッドには、アクションの発生の仕方に影響する追加オプションがあります。例えば、次のように括弧内で指定することにより、hideメソッドにアニメーションを追加できます。
ここでも、すべてのオプションを知るには、WixコードAPIを見る必要があります。
イベントハンドラ
イベントハンドラは、要素がユーザアクション(イベント)に応答できるようにします。要素にイベントハンドラを追加する場合、イベントが発生したときに何を実行するかを指定することも必要になります。
例えば、「ツアーに参加する」というボタンがある場合を考えます。訪問者がボタンにカーソルを合わせると、テキストが「さあ行こう」に変わるように機能を追加しようとしています。その場合、次のようなコードをサイトに追加することになります(コードの各部分を説明するコメントを追加してあります)。
//onMouseInはイベントハンドラです。
//コールバック関数はここから始まります。
//これは、イベントが発生したときに実行されるコードです。
//コールバック関数はここで終わります。
プロパティパネルを使用してイベントハンドラを要素に追加することもできることをお忘れなく。イベントハンドラを手動で追加する特別な理由がない限り、プロパティパネルを使用することをお勧めします。
イベントハンドラは、要素がユーザアクション(イベント)に応答できるようにします。要素にイベントハンドラを追加する場合、イベントが発生したときに何を実行するかを指定することも必要になります。
例えば、「ツアーに参加する」というボタンがある場合を考えます。訪問者がボタンにカーソルを合わせると、テキストが「さあ行こう」に変わるように機能を追加しようとしています。その場合、次のようなコードをサイトに追加することになります(コードの各部分を説明するコメントを追加してあります)。
//onMouseInはイベントハンドラです。
//コールバック関数はここから始まります。
//これは、イベントが発生したときに実行されるコードです。
//コールバック関数はここで終わります。
プロパティパネルを使用してイベントハンドラを要素に追加することもできることをお忘れなく。イベントハンドラを手動で追加する特別な理由がない限り、プロパティパネルを使用することをお勧めします。
警告およびエラー
コードパネルでコードを書いているときに、警告やエラーが表示される場合があります。警告は黄色で表示され、エラーは赤で表示されます。これらは、関連するコードの下に色付きの波線が表示される形で、また行番号の左側にアイコンが表示される形を取ります。
警告またはエラーメッセージを表示するには、アイコンにカーソルを合わせます。
コードパネルでコードを書いているときに、警告やエラーが表示される場合があります。警告は黄色で表示され、エラーは赤で表示されます。これらは、関連するコードの下に色付きの波線が表示される形で、また行番号の左側にアイコンが表示される形を取ります。
警告またはエラーメッセージを表示するには、アイコンにカーソルを合わせます。
警告
コードにおける警告は、変更した方がいいかもしれないコードに注意を促す情報メッセージです。警告はコードの実行を停止することはなく、多くの場合安全に無視できます。警告は黄色の三角形および黄色の波線で引かれた下線で表示されます。
//ここに関数をコーディングします
よくある警告メッセージは「return」の後に不要な「else」がある場合に現れます。これは、次のコーディングパターンを使用する場合に最もよく発生します。
//何かをする
//他の何かをする
someConditionがtrueの場合、関数は戻ります。つまり、someConditionがtrueの場合にコードの実行を停止するのにelseは必要ないということです。
この警告は安全に無視することもでき、コードを次のパターンに変更することもできます。
//何かをする
//他の何かをする
コードにおける警告は、変更した方がいいかもしれないコードに注意を促す情報メッセージです。警告はコードの実行を停止することはなく、多くの場合安全に無視できます。警告は黄色の三角形および黄色の波線で引かれた下線で表示されます。
//ここに関数をコーディングします
よくある警告メッセージは「return」の後に不要な「else」がある場合に現れます。これは、次のコーディングパターンを使用する場合に最もよく発生します。
//何かをする
//他の何かをする
someConditionがtrueの場合、関数は戻ります。つまり、someConditionがtrueの場合にコードの実行を停止するのにelseは必要ないということです。
この警告は安全に無視することもでき、コードを次のパターンに変更することもできます。
//何かをする
//他の何かをする
エラー
コードにエラーがあるということは、コードが適切に機能しないことを意味します。エラーの種類によっては、コードが期待どおりに機能しなかったり、まったく実行されなかったりする場合があります。サイト訪問者が使用できるようにサイトを公開する前に、コード内のすべてのエラーを必ず修正してください。
次に示すのは、コードにエラーが見つかることがある一般的な状況です。
・エラーメッセージ:「#text1」は有効なセレクタではありません(上の画像を参照)
注意:検索と置換機能を使用して、コード全体にわたってこのエラーを修正できます。
・エラーメッセージ:「インポート」および「エクスポート」は最上位レベルでのみ表示されます。
APIモジュールをインポートする場合、モジュールが使用される前にコードの最上位にimport文が表示される必要があります。つまり、次のように関数内にモジュールをインポートすることはできません。一般的に、あらゆる変数宣言および関数定義の前に、コードの最初の行にすべてのimport文を配置することをお勧めします。
・場合によっては、エラー表示は実際の誤りの箇所で表示されずに、誤りによりエラーが生じる最初の行に表示されます。例えば、ページコードの関数のうちの1つで終わり波括弧(})を忘れた場合、コードのちょうど次の行でエラーが発生する可能性が高くなります。以下に示すコードでは、6行目に終わり波括弧がありませんが、エラーは8行目まで発生しません。
コードにエラーがあるということは、コードが適切に機能しないことを意味します。エラーの種類によっては、コードが期待どおりに機能しなかったり、まったく実行されなかったりする場合があります。サイト訪問者が使用できるようにサイトを公開する前に、コード内のすべてのエラーを必ず修正してください。
次に示すのは、コードにエラーが見つかることがある一般的な状況です。
・エラーメッセージ:「#text1」は有効なセレクタではありません(上の画像を参照)
注意:検索と置換機能を使用して、コード全体にわたってこのエラーを修正できます。
・エラーメッセージ:「インポート」および「エクスポート」は最上位レベルでのみ表示されます。
APIモジュールをインポートする場合、モジュールが使用される前にコードの最上位にimport文が表示される必要があります。つまり、次のように関数内にモジュールをインポートすることはできません。一般的に、あらゆる変数宣言および関数定義の前に、コードの最初の行にすべてのimport文を配置することをお勧めします。
・場合によっては、エラー表示は実際の誤りの箇所で表示されずに、誤りによりエラーが生じる最初の行に表示されます。例えば、ページコードの関数のうちの1つで終わり波括弧(})を忘れた場合、コードのちょうど次の行でエラーが発生する可能性が高くなります。以下に示すコードでは、6行目に終わり波括弧がありませんが、エラーは8行目まで発生しません。
コードをテストする
コードは公開されたサイトで実行されますが、公開する前にコードをテストして、期待どおりに動作することを確認することをお勧めします。
公開する前にコードをテストするには、サイトをプレビューします。サイト内のコードは、プレビューモードでも、公開バージョンとまったく同じように実行されます。公開されたサイトでコードをデバッグすることもできます。
コードは公開されたサイトで実行されますが、公開する前にコードをテストして、期待どおりに動作することを確認することをお勧めします。
公開する前にコードをテストするには、サイトをプレビューします。サイト内のコードは、プレビューモードでも、公開バージョンとまったく同じように実行されます。公開されたサイトでコードをデバッグすることもできます。
コードのバージョンを保存する
保存すると、対応するコードがサイトのそのバージョンと共に保存されます。サイト履歴に移動して、サイトの保存したバージョンに戻すと、そのバージョンで保存されたコードも復元されます。
保存すると、対応するコードがサイトのそのバージョンと共に保存されます。サイト履歴に移動して、サイトの保存したバージョンに戻すと、そのバージョンで保存されたコードも復元されます。
関連するコンテンツ
WixコードでJavaScriptを使う
Wixコードを使用してコードをテストおよびデバッグする
WixコードでJavaScriptを使う
Wixコードを使用してコードをテストおよびデバッグする
ホーム>Wixコード>データベースコレクション
データベースコレクションについて
Wixコードリソースセンターにアクセスし、さらに学びましょう。
サイトのデータベースはいくつかのコレクションで構成されています。各コレクションは、スプレッドシートのようなデータのテーブルと考えることができます。テーブルの各行は、コレクション内のアイテムを表します。テーブルの各列はフィールドを表します。したがって、各アイテムには、コレクションの列によって定義されるフィールドが含まれます。
例えば、次のコレクションには4つのフィールドおよび5つのアイテムが含まれています。
データベースコレクションについて
Wixコードリソースセンターにアクセスし、さらに学びましょう。
サイトのデータベースはいくつかのコレクションで構成されています。各コレクションは、スプレッドシートのようなデータのテーブルと考えることができます。テーブルの各行は、コレクション内のアイテムを表します。テーブルの各列はフィールドを表します。したがって、各アイテムには、コレクションの列によって定義されるフィールドが含まれます。
例えば、次のコレクションには4つのフィールドおよび5つのアイテムが含まれています。
新しいコレクションを作成する
1.サイト構造サイドバーで、データベースセクション名にカーソルを合わせて、プラスアイコンをクリックします。
2.コレクションに名前を付けます。後で名前を変更できないことにご注意ください。
3.デフォルトでは、「サイトコンテンツ」コレクションパーミッションプリセットが選択されています。これにより、誰でもコンテンツを見ることができますが、作成者だけがコンテンツを追加、修正、および削除できます。ドロップダウンをクリックして、別のプリセットを選択したり、カスタムパーミッションを定義したりすることができます。パーミッションは後で更新できます。
4.完了したら、[コレクションを作成]をクリックします。
1.サイト構造サイドバーで、データベースセクション名にカーソルを合わせて、プラスアイコンをクリックします。
2.コレクションに名前を付けます。後で名前を変更できないことにご注意ください。
3.デフォルトでは、「サイトコンテンツ」コレクションパーミッションプリセットが選択されています。これにより、誰でもコンテンツを見ることができますが、作成者だけがコンテンツを追加、修正、および削除できます。ドロップダウンをクリックして、別のプリセットを選択したり、カスタムパーミッションを定義したりすることができます。パーミッションは後で更新できます。
4.完了したら、[コレクションを作成]をクリックします。
コレクションを編集する
データベースのそれぞれのコレクション内には、データのサンドボックスバージョンおよびライブバージョンが存在します。
エディタのコンテンツマネージャでサンドボックスバージョンを編集し、ダッシュボードでライブバージョンを編集します。画面上部の[ライブデータの編集]リンクをクリックすると、ダッシュボードのコンテンツマネージャに移動します。
データベースのそれぞれのコレクション内には、データのサンドボックスバージョンおよびライブバージョンが存在します。
エディタのコンテンツマネージャでサンドボックスバージョンを編集し、ダッシュボードでライブバージョンを編集します。画面上部の[ライブデータの編集]リンクをクリックすると、ダッシュボードのコンテンツマネージャに移動します。
フィールド名
フィールド名は、コンテンツマネージャの列の先頭に表示されるラベルです。フィールド名は、エディタでページ要素をデータセットに接続するときにも使用されます。
例えば、テキスト要素をコレクションからのフィールドに接続するときは、テキスト接続パネルのフィールド名を使用します。
コンテンツマネージャで新しいフィールドを追加するときに、フィールド名を指定します。フィールドの作成後にフィールド名を変更すると、そのフィールドへのすべての接続が更新されます。
フィールド名は、コンテンツマネージャの列の先頭に表示されるラベルです。フィールド名は、エディタでページ要素をデータセットに接続するときにも使用されます。
例えば、テキスト要素をコレクションからのフィールドに接続するときは、テキスト接続パネルのフィールド名を使用します。
コンテンツマネージャで新しいフィールドを追加するときに、フィールド名を指定します。フィールドの作成後にフィールド名を変更すると、そのフィールドへのすべての接続が更新されます。
フィールドキー
フィールドキーは、データAPIまたはデータセットAPIを使用してコード内のフィールドを参照するときに使用されます。
例えば、データAPIを使用してアイテムを挿入するには、フィールドキーを使用します。
コンテンツマネージャで新しいフィールドを追加すると、フィールド名に基づいてフィールドキーが自動的に作成されます。必要に応じて独自のフィールドキーを指定できます。
重要:
フィールドの作成後にフィールドキーを変更することはできません。
フィールドキーは、データAPIまたはデータセットAPIを使用してコード内のフィールドを参照するときに使用されます。
例えば、データAPIを使用してアイテムを挿入するには、フィールドキーを使用します。
コンテンツマネージャで新しいフィールドを追加すると、フィールド名に基づいてフィールドキーが自動的に作成されます。必要に応じて独自のフィールドキーを指定できます。
重要:
フィールドの作成後にフィールドキーを変更することはできません。
フィールドタイプ
フィールドタイプは、フィールドに含まれるデータの種類を定義します。コンテンツマネージャで新しいフィールドを追加するときに、次のフィールドタイプのうちの1つを選択します。フィールドタイプのサポートおよび制限についてはこちらをお読みください。
・参照
・テキスト
・画像
・ブーリアン
・数値
・日付および時刻
・リッチテキスト
・URL
・文書
フィールドタイプは、コレクションのフィールドにページ要素を接続するときにも使用されます。特定の入力要素は、関連するフィールドタイプのフィールドにのみ接続できます。例えば、テキスト要素をテキストまたはURLフィールドに接続できますが、画像フィールドには接続できません。
コンテンツマネージャでは、間違ったフィールドタイプの新しい値を追加することはできませんが、CSVファイルからインポートされたデータまたはコードを介して追加されたデータは検証されません。例えば、数値フィールドにテキスト値をインポートできます。この場合、コンテンツマネージャにエラーが表示されます。
参照フィールドタイプを使用して、参照コレクションのプライマリフィールドからアイテムを選択します。詳しくは、「参照フィールドを作成するには」を参照してください。
注意:
フィールドタイプは、フィールドに含まれるデータの種類を定義します。コンテンツマネージャで新しいフィールドを追加するときに、次のフィールドタイプのうちの1つを選択します。フィールドタイプのサポートおよび制限についてはこちらをお読みください。
・参照
・テキスト
・画像
・ブーリアン
・数値
・日付および時刻
・リッチテキスト
・URL
・文書
フィールドタイプは、コレクションのフィールドにページ要素を接続するときにも使用されます。特定の入力要素は、関連するフィールドタイプのフィールドにのみ接続できます。例えば、テキスト要素をテキストまたはURLフィールドに接続できますが、画像フィールドには接続できません。
コンテンツマネージャでは、間違ったフィールドタイプの新しい値を追加することはできませんが、CSVファイルからインポートされたデータまたはコードを介して追加されたデータは検証されません。例えば、数値フィールドにテキスト値をインポートできます。この場合、コンテンツマネージャにエラーが表示されます。
参照フィールドタイプを使用して、参照コレクションのプライマリフィールドからアイテムを選択します。詳しくは、「参照フィールドを作成するには」を参照してください。
注意:
プライマリフィールド
すべてのデータベースコレクションにはプライマリフィールドがあり、コンテンツマネージャではフィールド名の横にあるロックアイコンで示されます。デフォルトでは、タイトルフィールドはプライマリフィールドですが、コレクション内の任意の他のテキストフィールドを、IDシステムフィールドを除くプライマリフィールドに設定できます。
参照フィールドに情報を入力する場合、参照したコレクションのプライマリフィールドの値から選択します。参照したコレクションのプライマリフィールドを変更すると、参照フィールドに表示される値は、新しいプライマリフィールドの値と一致するように変化します。各アイテムがプライマリフィールドで一意の値を有するようにすることをお勧めします。
詳しくは、「参照フィールドについて」を参照してください。
すべてのデータベースコレクションにはプライマリフィールドがあり、コンテンツマネージャではフィールド名の横にあるロックアイコンで示されます。デフォルトでは、タイトルフィールドはプライマリフィールドですが、コレクション内の任意の他のテキストフィールドを、IDシステムフィールドを除くプライマリフィールドに設定できます。
参照フィールドに情報を入力する場合、参照したコレクションのプライマリフィールドの値から選択します。参照したコレクションのプライマリフィールドを変更すると、参照フィールドに表示される値は、新しいプライマリフィールドの値と一致するように変化します。各アイテムがプライマリフィールドで一意の値を有するようにすることをお勧めします。
詳しくは、「参照フィールドについて」を参照してください。
システムフィールド
すべてのデータベースコレクションには、次に示すデフォルトフィールドが含まれています。これらは編集できず、デフォルトでは非表示になっています。
IDフィールドの値は、データAPIを使用してアイテムを追加するとき、またはCSVファイルから新しいデータをインポートするときに割り当てることができます。後で変更することはできません。それ以外のすべての場合で、これらのフィールドの値は自動的に生成され、変更できません。
すべてのデータベースコレクションには、次に示すデフォルトフィールドが含まれています。これらは編集できず、デフォルトでは非表示になっています。
IDフィールドの値は、データAPIを使用してアイテムを追加するとき、またはCSVファイルから新しいデータをインポートするときに割り当てることができます。後で変更することはできません。それ以外のすべての場合で、これらのフィールドの値は自動的に生成され、変更できません。
計算されたフィールド
動的ページを作成すると、動的ページがデータをプルするコレクションに新しいフィールドが追加されます。このフィールドには、動的ページのプレフィックスとページにバインドされるデータを判定するフィールドの値とを含む計算されたURLが含まれます。
例えば、タイトルフィールドに基づいて料理コレクションからのアイテムを表示する動的アイテムページがあるとします。コレクションには、/Dishes/pizzaおよび/Dishes/checkenなどのURLを持つ料理(タイトル)というフィールドがあります。
訪問者が動的ページに行くと、ページのURLに一致するURLを持つコレクションのすべてのアイテムがページのデータセットにバインドされます。
動的アイテムページの場合、各アイテムには一意のURLがあります。動的カテゴリペ
ージの場合、複数のアイテムがURLを共有します。
計算フィールドのコンテンツを編集することはできません。しかしながら、動的ページのURLを変更すると、それに応じてコレクション内のURLも変更されます。コレクションに基づいて複数の動的ページを作成する場合、コレクションには動的ページごとに1つの計算されたフィールドを持ちます。
詳しくは、「計算されたフィールドについて」を参照してください。
パーミッションモデルを使用すると、コレクション内のデータの操作を許可されている訪問者と許可されている操作とを管理できます。
パーミッションはコレクションごとに設定されます。どのユーザロールがどのアクションを実行できるかを判定するパーミッションを割り当てます。例えば、コメントコレクションに関してサイトメンバに作成パーミッションを付与しながらも、別のコレクションではアイテムを作成できないようにすることができます。
詳しくは、「データベースコレクションのパーミッションについて」を参照してください。
動的ページを作成すると、動的ページがデータをプルするコレクションに新しいフィールドが追加されます。このフィールドには、動的ページのプレフィックスとページにバインドされるデータを判定するフィールドの値とを含む計算されたURLが含まれます。
例えば、タイトルフィールドに基づいて料理コレクションからのアイテムを表示する動的アイテムページがあるとします。コレクションには、/Dishes/pizzaおよび/Dishes/checkenなどのURLを持つ料理(タイトル)というフィールドがあります。
訪問者が動的ページに行くと、ページのURLに一致するURLを持つコレクションのすべてのアイテムがページのデータセットにバインドされます。
動的アイテムページの場合、各アイテムには一意のURLがあります。動的カテゴリペ
ージの場合、複数のアイテムがURLを共有します。
計算フィールドのコンテンツを編集することはできません。しかしながら、動的ページのURLを変更すると、それに応じてコレクション内のURLも変更されます。コレクションに基づいて複数の動的ページを作成する場合、コレクションには動的ページごとに1つの計算されたフィールドを持ちます。
詳しくは、「計算されたフィールドについて」を参照してください。
パーミッションモデルを使用すると、コレクション内のデータの操作を許可されている訪問者と許可されている操作とを管理できます。
パーミッションはコレクションごとに設定されます。どのユーザロールがどのアクションを実行できるかを判定するパーミッションを割り当てます。例えば、コメントコレクションに関してサイトメンバに作成パーミッションを付与しながらも、別のコレクションではアイテムを作成できないようにすることができます。
詳しくは、「データベースコレクションのパーミッションについて」を参照してください。
データのインポートおよびエクスポート
コレクションからCSVファイルにデータをエクスポートでき、CSVファイルからコレクションにデータをインポートできます。
下記の記事をご参照ください。
・サンドボックスとライブデータについて
コレクションからCSVファイルにデータをエクスポートでき、CSVファイルからコレクションにデータをインポートできます。
下記の記事をご参照ください。
・サンドボックスとライブデータについて
関連するコンテンツ
データベース構造を使えるようにする
フィールドタイプを変更する
参照フィールドについて
コレクションのパーミッションについて
コンテンツマネージャにコレクションデータをインポートするには
サンドボックスデータとライブデータについて
コレクションからフィールドを削除する
計算されたフィールドについて
動的ページについて
コンテンツマネージャでコレクションデータをエクスポートするには
データベース構造を使えるようにする
フィールドタイプを変更する
参照フィールドについて
コレクションのパーミッションについて
コンテンツマネージャにコレクションデータをインポートするには
サンドボックスデータとライブデータについて
コレクションからフィールドを削除する
計算されたフィールドについて
動的ページについて
コンテンツマネージャでコレクションデータをエクスポートするには
ホーム>Wixコード>アドバンスト
ルータについて
Wixコードリソースセンターにアクセスし、さらに学びましょう。
Wixコードを使用することにより、サイトに到来する要求を処理する場合に完全に管理を行えるルータを作成できます。これを行うには、指定されたプレフィックスを持つすべての到来する要求を受け取るようにルータを設定し、そのプレフィックスを持つ要求を受け取ったときに実行するロジックを定義します。実行するアクション、返す応答、要求をルーティングする場所、ページに渡すデータを決定します。
ルータを使用して次のことができます。
・任意のデータソースからのコンテンツを使用して動的ページを表示する。
・URLをカスタマイズして、より意味のあるものにし、SEOの結果を改善する。
・ユーザを認証し、ユーザ専用のコンテンツを表示する。
・カスタムHTTP応答コードを返す。
ルータのAPI参照はこちらを参照してください。
ルータについて
Wixコードリソースセンターにアクセスし、さらに学びましょう。
Wixコードを使用することにより、サイトに到来する要求を処理する場合に完全に管理を行えるルータを作成できます。これを行うには、指定されたプレフィックスを持つすべての到来する要求を受け取るようにルータを設定し、そのプレフィックスを持つ要求を受け取ったときに実行するロジックを定義します。実行するアクション、返す応答、要求をルーティングする場所、ページに渡すデータを決定します。
ルータを使用して次のことができます。
・任意のデータソースからのコンテンツを使用して動的ページを表示する。
・URLをカスタマイズして、より意味のあるものにし、SEOの結果を改善する。
・ユーザを認証し、ユーザ専用のコンテンツを表示する。
・カスタムHTTP応答コードを返す。
ルータのAPI参照はこちらを参照してください。
URLプレフィックス
ルータを作成する場合、指定したURLプレフィックスに基づいて、どの要求をルータ
で処理するかを選択します。そのURLプレフィックスを持つすべての到来する要求が、処理のためにルータに送信されます。URLプレフィックスはまた、ルータ名としても使用されます。
プレフィックスは、次の例で太字で示されているURLの一部です。
・プレミアムサイト:https://domain.com/prefix/category/item
・無料サイト:https://user.wixsite.com/yoursite/prefix/category/item
ルーティングロジックはrouters.jsファイルで定義されます。このファイルは、サイト構造サイドバーのバックエンドセクションにあります。ルータへのエントリポイントである2つの主な機能があります。
これらは、次の規則にしたがって命名されます。
・<router prefix>_router(request)
・<router prefix>_sitemap(sitemapRequest)
ルータを作成する場合、指定したURLプレフィックスに基づいて、どの要求をルータ
で処理するかを選択します。そのURLプレフィックスを持つすべての到来する要求が、処理のためにルータに送信されます。URLプレフィックスはまた、ルータ名としても使用されます。
プレフィックスは、次の例で太字で示されているURLの一部です。
・プレミアムサイト:https://domain.com/prefix/category/item
・無料サイト:https://user.wixsite.com/yoursite/prefix/category/item
ルーティングロジックはrouters.jsファイルで定義されます。このファイルは、サイト構造サイドバーのバックエンドセクションにあります。ルータへのエントリポイントである2つの主な機能があります。
これらは、次の規則にしたがって命名されます。
・<router prefix>_router(request)
・<router prefix>_sitemap(sitemapRequest)
router()
router()関数では、定義されたプレフィックスを持つページ要求が送信されます。ルータは、到来する要求に関する情報を含むWixRouterRequestオブジェクトを受け取ります。次に、関数は要求の処理方法を決定し、適切なWixRouterResponseを返します。通常、router()関数は、表示するページ(存在する場合)とページに渡すデータとを決定します。次に、forbidden()関数、notFound()関数、ok()関数、redirect()関数、またはsendStatus()関数を使用して応答が送信されます。
router()関数では、定義されたプレフィックスを持つページ要求が送信されます。ルータは、到来する要求に関する情報を含むWixRouterRequestオブジェクトを受け取ります。次に、関数は要求の処理方法を決定し、適切なWixRouterResponseを返します。通常、router()関数は、表示するページ(存在する場合)とページに渡すデータとを決定します。次に、forbidden()関数、notFound()関数、ok()関数、redirect()関数、またはsendStatus()関数を使用して応答が送信されます。
sitemap()
sitemap()関数では、サイトマップ要求が処理されます。この関数を使用して、検索エンジンがルータのページへのリンクを確実に見つけられるようにします。各WixSitemapEntryには、URL、タイトル、名前など、ページに関する情報が含まれています。
sitemap()関数はまた、アイテムプレビューウィジェットに入力するためにも使用され、プレビューモードでURLを切り替えることができます。
sitemap()関数では、サイトマップ要求が処理されます。この関数を使用して、検索エンジンがルータのページへのリンクを確実に見つけられるようにします。各WixSitemapEntryには、URL、タイトル、名前など、ページに関する情報が含まれています。
sitemap()関数はまた、アイテムプレビューウィジェットに入力するためにも使用され、プレビューモードでURLを切り替えることができます。
ルータデータ
router()関数は、ルーティング先のページにデータを送信することを選択できます。フロントエンドページコードでそのデータにアクセスするには、wix-windowモジュールのgetRouterData()関数を使用します。
router()関数は、ルーティング先のページにデータを送信することを選択できます。フロントエンドページコードでそのデータにアクセスするには、wix-windowモジュールのgetRouterData()関数を使用します。
関連するコンテンツ
ルータを作成する
ルータを作成する
ホーム>Wixコード>アドバンスト
ルータを作成する
ルータを作成することにより、サイトに到来する要求を処理する場合に完全に管理できます。
この記事では、ルータを機能させるために記述する必要があるかコードを説明します。ルータとは何か、またルータを作成するべき理由についての詳細は、「ルータについて」を参照してください。
ルータを作成する
ルータを作成することにより、サイトに到来する要求を処理する場合に完全に管理できます。
この記事では、ルータを機能させるために記述する必要があるかコードを説明します。ルータとは何か、またルータを作成するべき理由についての詳細は、「ルータについて」を参照してください。
ルータを追加する
ルータを追加するには:
1.サイト構造サイドバーのページセクションヘッダにカーソルを合わせると表示されるプラスアイコンをクリックし、[ルータを追加する]を選択します。
2.ルータのURLプレフィックスを入力し、[コードの追加と編集]をクリックします。指定されたURLプレフィックスを持つすべての到来する要求が、処理のためにルータに送信されます。
ルータを追加する場合には:
・ルータのrouter()関数およびsitemap()関数は、単純なルーティングシナリオのサンプルコードと共にrouters.jsファイルに追加されます。routers.jsファイルは、サイト構造サイドバーのバックエンドセクションにあります。
・ページの下の新しいセクションもルータのために作成されます。セクションには、前に選択したプレフィックスを使用して名前が付けられ、始めるためのページが1ページ含まれています。例えば、ルータに「myRouter」という名前を付けた場合、myRouter-pageという名前のページを持つMyRouter Pages(Router)セクションが追加されます。
ルータを追加するには:
1.サイト構造サイドバーのページセクションヘッダにカーソルを合わせると表示されるプラスアイコンをクリックし、[ルータを追加する]を選択します。
2.ルータのURLプレフィックスを入力し、[コードの追加と編集]をクリックします。指定されたURLプレフィックスを持つすべての到来する要求が、処理のためにルータに送信されます。
ルータを追加する場合には:
・ルータのrouter()関数およびsitemap()関数は、単純なルーティングシナリオのサンプルコードと共にrouters.jsファイルに追加されます。routers.jsファイルは、サイト構造サイドバーのバックエンドセクションにあります。
・ページの下の新しいセクションもルータのために作成されます。セクションには、前に選択したプレフィックスを使用して名前が付けられ、始めるためのページが1ページ含まれています。例えば、ルータに「myRouter」という名前を付けた場合、myRouter-pageという名前のページを持つMyRouter Pages(Router)セクションが追加されます。
サンプルシナリオ
routers.jsファイルに追加されるサンプルコードには4つのパートがあります。
3.router()関数
4.sitemap()関数
routers.jsファイルに追加されるサンプルコードには4つのパートがあります。
3.router()関数
4.sitemap()関数
import文
ルータを作成するために使用される機能は、ルータAPIに含まれています。この機能を使用するには、これをインポートする必要があります。デフォルトでは、ok()関数とnotFound()関数、およびWixRouterSitemapEntryオブジェクトがインポートされています。
ルータAPIからの機能をさらに使用する場合は、それをimport文に追加する必要があります。
ルータを作成するために使用される機能は、ルータAPIに含まれています。この機能を使用するには、これをインポートする必要があります。デフォルトでは、ok()関数とnotFound()関数、およびWixRouterSitemapEntryオブジェクトがインポートされています。
ルータAPIからの機能をさらに使用する場合は、それをimport文に追加する必要があります。
サンプルデータ
サンプルシナリオでは、ルータはpeopleDataという名前のオブジェクトに含まれる静的データを使用します。
ルータでは静的データを使用できますが、通常はサイトのデータベースまたは外部ソースからのデータを使用します。そのデータを取得するためのコードをどこで記述するかについては、後ほど説明します。
データをどこから取得するかに関係なく、データを処理するコードを記述するため、データは任意の方法で構造化できます。
サンプルシナリオでは、ルータはpeopleDataという名前のオブジェクトに含まれる静的データを使用します。
ルータでは静的データを使用できますが、通常はサイトのデータベースまたは外部ソースからのデータを使用します。そのデータを取得するためのコードをどこで記述するかについては、後ほど説明します。
データをどこから取得するかに関係なく、データを処理するコードを記述するため、データは任意の方法で構造化できます。
ルータ関数
ルータの作成時に指定したURLプレフィックスを持つすべての到来する要求は、処理のためにルータに送信されることに注意してください。router()関数で、これらの要求を処理します。
router()関数は、次の規則にしたがって命名されます。
そのため、ルータにmyRouterという名前を付けた場合、routers.jsファイルに追加されるコードは次のようになります。
//コードをルーティングします。
router()関数には、到来する要求に関する情報を含むWixRouterRequestオブジェクトを受け取る要求パラメータがあります。オブジェクトには、ルータに到達するために使用されるURL、要求の送信場所、要求の送信者に関する情報が含
まれています。
通常、router()関数は、表示するページ(存在する場合)とページに渡すデータとを決定します。次に、forbidden()関数、notFound()関数、ok()関数、redirect()関数、またはsendStatus()関数を使用して応答が送信されます。
router()関数のサンプルコードを見てみましょう。
//名前でアイテムデータを取得する
//SEOタグを定義する
//アイテムページをレンダリングする
//アイテムが見つからない場合は404を返す
router()関数は、要求のパスを解析して名前の値を引き出すことから始まります。
例えば、ユーザはhttps://mysite.com/myRouter/Ashをブラウズしてこのrouter()関数に到達できます。受信したWixRouterRequestオブジェクトのパスプロパティは、1つの要素[”Ash”]を持つ配列になります。ここでは名前の値は「Ash」です。
次に、router()関数は、受け取った名前に基づいてデータを取得します。
上記の例を続けると、peopleDataオブジェクトからAshの情報を引き出します。
したがって、データは次のようになります。
外部ソースからデータを取得する場合には、ここでそのデータを取得するための呼び出しを行います。
到来する要求に対応するデータの取得を試みた後、データが見つかったかどうかを確認します。
何も見つからなかった場合、ifはスキップされ、notFound()関数を使用して404エラーを返します。
探しているデータが見つかったと仮定して、ここでページのためのヘッダデータを準備します。
サンプルコードは、取得したデータオブジェクトのタイトルプロパティに基づいてタイトルおよび説明を作成します。また、noIndexをfalseに設定します。これは、検索エンジンがページをインデックスすべきであることを意味します。最後に、いくつかのメタタグプロパティも追加されます。
必要な情報を用いてHeadOptionsオブジェクトを作成できます。
ページのキーワードを含む文字列を使用して、HeadOptionsオブジェクトにキーワードプロパティを追加することもできます。
最後に、ok()関数を使用してWixRouterResponseオブジェクトを返します。
ここで、ユーザを「myRouter-page」という名前のルータページにルーティングし、取得したデータとそのページ用に構築されたseoDataとを渡します。
状況に応じて、router()関数からいくつかの異なる応答を返すことができます。これまで、notFound()関数およびok()関数が使用されているのを見てきました。また、forbidden()関数を使用して403応答を返す、またはredirect()関数を使用して301もしくは302応答を返す、またはsendStatus()関数を使用して選択したステータスコードで応答を返すこともできます。
ルータの作成時に指定したURLプレフィックスを持つすべての到来する要求は、処理のためにルータに送信されることに注意してください。router()関数で、これらの要求を処理します。
router()関数は、次の規則にしたがって命名されます。
そのため、ルータにmyRouterという名前を付けた場合、routers.jsファイルに追加されるコードは次のようになります。
//コードをルーティングします。
router()関数には、到来する要求に関する情報を含むWixRouterRequestオブジェクトを受け取る要求パラメータがあります。オブジェクトには、ルータに到達するために使用されるURL、要求の送信場所、要求の送信者に関する情報が含
まれています。
通常、router()関数は、表示するページ(存在する場合)とページに渡すデータとを決定します。次に、forbidden()関数、notFound()関数、ok()関数、redirect()関数、またはsendStatus()関数を使用して応答が送信されます。
router()関数のサンプルコードを見てみましょう。
//名前でアイテムデータを取得する
//SEOタグを定義する
//アイテムページをレンダリングする
//アイテムが見つからない場合は404を返す
router()関数は、要求のパスを解析して名前の値を引き出すことから始まります。
例えば、ユーザはhttps://mysite.com/myRouter/Ashをブラウズしてこのrouter()関数に到達できます。受信したWixRouterRequestオブジェクトのパスプロパティは、1つの要素[”Ash”]を持つ配列になります。ここでは名前の値は「Ash」です。
次に、router()関数は、受け取った名前に基づいてデータを取得します。
上記の例を続けると、peopleDataオブジェクトからAshの情報を引き出します。
したがって、データは次のようになります。
外部ソースからデータを取得する場合には、ここでそのデータを取得するための呼び出しを行います。
到来する要求に対応するデータの取得を試みた後、データが見つかったかどうかを確認します。
何も見つからなかった場合、ifはスキップされ、notFound()関数を使用して404エラーを返します。
探しているデータが見つかったと仮定して、ここでページのためのヘッダデータを準備します。
サンプルコードは、取得したデータオブジェクトのタイトルプロパティに基づいてタイトルおよび説明を作成します。また、noIndexをfalseに設定します。これは、検索エンジンがページをインデックスすべきであることを意味します。最後に、いくつかのメタタグプロパティも追加されます。
必要な情報を用いてHeadOptionsオブジェクトを作成できます。
ページのキーワードを含む文字列を使用して、HeadOptionsオブジェクトにキーワードプロパティを追加することもできます。
最後に、ok()関数を使用してWixRouterResponseオブジェクトを返します。
ここで、ユーザを「myRouter-page」という名前のルータページにルーティングし、取得したデータとそのページ用に構築されたseoDataとを渡します。
状況に応じて、router()関数からいくつかの異なる応答を返すことができます。これまで、notFound()関数およびok()関数が使用されているのを見てきました。また、forbidden()関数を使用して403応答を返す、またはredirect()関数を使用して301もしくは302応答を返す、またはsendStatus()関数を使用して選択したステータスコードで応答を返すこともできます。
ルータデータ
ok()関数を使用してWixRouterResponseで返されたデータを使用するには、wix-windowのgetRouterData()関数を使用します。
例えば、サンプルルータコードによって渡されたデータを取得し、それを使用して、作成されたmyRouter-pageページに個人の情報を表示できます。
まず、個人のタイトルおよび画像のためのプレースホルダとして機能するテキストおよび画像要素を追加する必要があります。
ページをプレビューすると、ページに配置したプレースホルダに、ページに渡されたデータからの情報が入力されていることがわかります。プレビューウィジェットを使用して、routers.jsファイルで定義されたpeopleDataオブジェクト内の人物のうちのいずれかのためのページの様子を確認できます。
プレビューウィジェットには、ルータのsitemap()関数によって返されるWixRouterSitemapEntryオブジェクトからのタイトル値が入力されます。
ok()関数を使用してWixRouterResponseで返されたデータを使用するには、wix-windowのgetRouterData()関数を使用します。
例えば、サンプルルータコードによって渡されたデータを取得し、それを使用して、作成されたmyRouter-pageページに個人の情報を表示できます。
まず、個人のタイトルおよび画像のためのプレースホルダとして機能するテキストおよび画像要素を追加する必要があります。
ページをプレビューすると、ページに配置したプレースホルダに、ページに渡されたデータからの情報が入力されていることがわかります。プレビューウィジェットを使用して、routers.jsファイルで定義されたpeopleDataオブジェクト内の人物のうちのいずれかのためのページの様子を確認できます。
プレビューウィジェットには、ルータのsitemap()関数によって返されるWixRouterSitemapEntryオブジェクトからのタイトル値が入力されます。
サイトマップ関数
router()関数と同様に、sitemap()関数は、次の規則にしたがって命名されます。
そのため、ルータにmyRouterという名前を付けた場合、routers.jsファイルに追加されるコードは次のようになります。
//コードをルーティングします。
sitemap()関数には、到来する要求に関する情報を含むWixRouterSitemapEntryオブジェクトを受け取るsitemapRequestパラメータがあります。オブジェクトには、ルータに到達するために使用されるURL、ルータ内のページ、要求の送信者に関する情報が含まれています。
通常、sitemap()関数は、ルータが使用するデータのアイテムごとにWixRouterSitemapEntryオブジェクトを作成します。そのため、この例では、personDataオブジェクトの各人物のエントリを作成します。インデックスページや検索ページなど、他のページのエントリを含めることもできます。
//データをサイトマップエントリに変換します。
//Wixエディタにおけるページの名前
//ページの相対URL
//より良いSEOのために-Googleの助けとなるように
//サイトマップエントリを返します。
sitemap()関数はpeopleDataオブジェクトのキーを取得し、JavaScriptのmap()関数を使用してWixRouterSitemapEntryオブジェクトの配列を、キーごとに1つのオブジェクトとなるように作成します。各エントリには、pageNameプロパティ、urlプロパティ、およびtitleプロパティの値が与えられます。次に、配列はPromiseにラップされて返されます。
サイトマップエントリには、changeFrequecyプロパティ、lastModifiedプロパティ、およびpriorityプロパティを含むことができて、検索エンジンに各ページに関するより多くの情報を提供することもできます。
外部データでルータを使用している場合、sitemap()関数でそのデータを取得し、取得した各アイテムのサイトマップエントリを構築します。
router()関数と同様に、sitemap()関数は、次の規則にしたがって命名されます。
そのため、ルータにmyRouterという名前を付けた場合、routers.jsファイルに追加されるコードは次のようになります。
//コードをルーティングします。
sitemap()関数には、到来する要求に関する情報を含むWixRouterSitemapEntryオブジェクトを受け取るsitemapRequestパラメータがあります。オブジェクトには、ルータに到達するために使用されるURL、ルータ内のページ、要求の送信者に関する情報が含まれています。
通常、sitemap()関数は、ルータが使用するデータのアイテムごとにWixRouterSitemapEntryオブジェクトを作成します。そのため、この例では、personDataオブジェクトの各人物のエントリを作成します。インデックスページや検索ページなど、他のページのエントリを含めることもできます。
//データをサイトマップエントリに変換します。
//Wixエディタにおけるページの名前
//ページの相対URL
//より良いSEOのために-Googleの助けとなるように
//サイトマップエントリを返します。
sitemap()関数はpeopleDataオブジェクトのキーを取得し、JavaScriptのmap()関数を使用してWixRouterSitemapEntryオブジェクトの配列を、キーごとに1つのオブジェクトとなるように作成します。各エントリには、pageNameプロパティ、urlプロパティ、およびtitleプロパティの値が与えられます。次に、配列はPromiseにラップされて返されます。
サイトマップエントリには、changeFrequecyプロパティ、lastModifiedプロパティ、およびpriorityプロパティを含むことができて、検索エンジンに各ページに関するより多くの情報を提供することもできます。
外部データでルータを使用している場合、sitemap()関数でそのデータを取得し、取得した各アイテムのサイトマップエントリを構築します。
関連するコンテンツ
ルータについて
ルータについて
ホーム>Wixコード>アドバンスト
SEOおよびルーティング
ルータページのSEO設定は、通常ページの設定とわずかに異なります。WixページのSEOについてはこちらをご覧ください。
通常ページの場合と同様に、ルータページのページタイトル、説明、ソーシャルネットワーク画像を定義できます。違いは、ルータページには静的データが含まれておらず、SEO情報を動的に設定する必要があるため、表示されたときに保持している実際のコンテンツを反映することです。
ルータページでSEOを設定するには2つのパートがあります。
・Googleがページについて学習するためのメタタグを作成する。
・Googleがページを見つけるのに使用するためのサイトマップを作成する。
SEOおよびルーティング
ルータページのSEO設定は、通常ページの設定とわずかに異なります。WixページのSEOについてはこちらをご覧ください。
通常ページの場合と同様に、ルータページのページタイトル、説明、ソーシャルネットワーク画像を定義できます。違いは、ルータページには静的データが含まれておらず、SEO情報を動的に設定する必要があるため、表示されたときに保持している実際のコンテンツを反映することです。
ルータページでSEOを設定するには2つのパートがあります。
・Googleがページについて学習するためのメタタグを作成する。
・Googleがページを見つけるのに使用するためのサイトマップを作成する。
メタタグ
ルータのrouter()関数を作成するときに、ルータのページにSEOメタタグを設定します。その関数内で、HeadOptionsオブジェクトを作成し、ok()関数を使用してルーティング先のページに渡します。
例えば、ルータを追加するときに提供されるサンプルコードにおいて、次のコードではルータによって取得されたデータを使用して、HeadOptionsオブジェクトを構築し、myRouter-pageという名前のページに渡します。
//ページのデータを取得します。
HeadOptionsオブジェクトには、router()関数で取得したデータを使用して、関連する値を設定できるいくつかのプロパティが含まれています。タイトルおよび説明のプロパティには、SEOの目的で使用されるページのタイトルおよび説明が含まれています。オブジェクトには、ページをインデックスするべきか否かをGoogleに伝えるnoIndexフラグを含めることもできます。追加のメタタグをmetaTagsプロパティに追加できます。
HeadOptionsオブジェクトにはキーワードプロパティを含めることもできますが、Googleはサイトのキーワードを無視します。
ルータのrouter()関数を作成するときに、ルータのページにSEOメタタグを設定します。その関数内で、HeadOptionsオブジェクトを作成し、ok()関数を使用してルーティング先のページに渡します。
例えば、ルータを追加するときに提供されるサンプルコードにおいて、次のコードではルータによって取得されたデータを使用して、HeadOptionsオブジェクトを構築し、myRouter-pageという名前のページに渡します。
//ページのデータを取得します。
HeadOptionsオブジェクトには、router()関数で取得したデータを使用して、関連する値を設定できるいくつかのプロパティが含まれています。タイトルおよび説明のプロパティには、SEOの目的で使用されるページのタイトルおよび説明が含まれています。オブジェクトには、ページをインデックスするべきか否かをGoogleに伝えるnoIndexフラグを含めることもできます。追加のメタタグをmetaTagsプロパティに追加できます。
HeadOptionsオブジェクトにはキーワードプロパティを含めることもできますが、Googleはサイトのキーワードを無視します。
サイトマップ
サイトのサイトマップは、Googleがサイトのすべてのページを見つけるために使用するものです。ルータに属さないサイト上のページは、サイトのサイトマップに追加されます。しかしながら、動的に異なるすべてのバージョンを含め、ルータで利用可能なページを完全に制御するため、Googleがそれらを見つけることができるように、ルータのプレフィックスに接続されるすべての可能なURLを含むサイトマップを作成する必要があります。
ルータのページをサイトのサイトマップに追加するには、ルータのためのsitemap()関数を作成します。その関数内で、ルータがルーティングできるURLごとにWixRouterSitemapEntryオブジェクトを作成します。各WixRouterSitemapEntryには、URL、タイトル、名前など、ページに関する情報が含まれています。また、コンテンツの変更頻度、最終変更日時、サイト内での相対的な優先度など、各ページに関する追加情報を追加することもできます。Googleはサイトマップエントリを使用して、サイト内のすべてのページを発見します。
例えば、ルータを追加するときに提供されるサンプルコードにおいて、次のコードでは
ルータによって取得されたデータを使用して、HeadOptionsオブジェクトを構築し、myRouter-pageという名前のページに渡します。
//データをサイトマップエントリに変換します。
//非同期Promiseにラップします。
サイトマップが適切に機能していることを確認するには、公開されたサイトからサイトマップを取得できます。ウェブブラウザで、公開されたサイトのURLに移動し、それに/sitemap.xmlを追加します。
例えば、プレミアムサイトの場合に、サイトの公開されたURLが次の場合、
https://mysite.com
次のURLに移動します。
https://mysite.com/sitemap.xml
無料サイトの場合に、サイトの公開されたURLが次の場合、
https://username.wixsite.com/site-name
次のURLに移動します。
https://username.wixsite.com/site-name/sitemap.xml
サイトのサイトマップは、Googleがサイトのすべてのページを見つけるために使用するものです。ルータに属さないサイト上のページは、サイトのサイトマップに追加されます。しかしながら、動的に異なるすべてのバージョンを含め、ルータで利用可能なページを完全に制御するため、Googleがそれらを見つけることができるように、ルータのプレフィックスに接続されるすべての可能なURLを含むサイトマップを作成する必要があります。
ルータのページをサイトのサイトマップに追加するには、ルータのためのsitemap()関数を作成します。その関数内で、ルータがルーティングできるURLごとにWixRouterSitemapEntryオブジェクトを作成します。各WixRouterSitemapEntryには、URL、タイトル、名前など、ページに関する情報が含まれています。また、コンテンツの変更頻度、最終変更日時、サイト内での相対的な優先度など、各ページに関する追加情報を追加することもできます。Googleはサイトマップエントリを使用して、サイト内のすべてのページを発見します。
例えば、ルータを追加するときに提供されるサンプルコードにおいて、次のコードでは
ルータによって取得されたデータを使用して、HeadOptionsオブジェクトを構築し、myRouter-pageという名前のページに渡します。
//データをサイトマップエントリに変換します。
//非同期Promiseにラップします。
サイトマップが適切に機能していることを確認するには、公開されたサイトからサイトマップを取得できます。ウェブブラウザで、公開されたサイトのURLに移動し、それに/sitemap.xmlを追加します。
例えば、プレミアムサイトの場合に、サイトの公開されたURLが次の場合、
https://mysite.com
次のURLに移動します。
https://mysite.com/sitemap.xml
無料サイトの場合に、サイトの公開されたURLが次の場合、
https://username.wixsite.com/site-name
次のURLに移動します。
https://username.wixsite.com/site-name/sitemap.xml
ホーム>Wixコード>アドバンスト
サードパーティサービスにアクセスする
Wixコードを使用して、サードパーティのウェブサービスにアクセスするコードを作成できます。サードパーティのサービスをクライアントサイドのコードから直接呼び出すことができます。しかしながら、APIキーの公開などのセキュリティ上の懸念がある場合は、バックエンドウェブモジュールからサービスを呼び出すことができます。
注意:
サイトがHTTPSサイトである場合、サービスからHTTPコンテンツを要求することはできません。無効な要求はエラーを引き起こします。これはブラウザの開発者ツールを使用して確認できます。要求を修正するには、HTTPSプロトコルを使用して要求されたリソースをHTTPSサイトから取得するか、サイトのSSLをオフにしてHTTPリソースを取得します。
>アドバンスト:サービスを呼び出すために利用可能なモジュール
サードパーティサービスにアクセスする
Wixコードを使用して、サードパーティのウェブサービスにアクセスするコードを作成できます。サードパーティのサービスをクライアントサイドのコードから直接呼び出すことができます。しかしながら、APIキーの公開などのセキュリティ上の懸念がある場合は、バックエンドウェブモジュールからサービスを呼び出すことができます。
注意:
サイトがHTTPSサイトである場合、サービスからHTTPコンテンツを要求することはできません。無効な要求はエラーを引き起こします。これはブラウザの開発者ツールを使用して確認できます。要求を修正するには、HTTPSプロトコルを使用して要求されたリソースをHTTPSサイトから取得するか、サイトのSSLをオフにしてHTTPリソースを取得します。
>アドバンスト:サービスを呼び出すために利用可能なモジュール
クライアントサイドサービスの呼び出し
例えば、サードパーティのサービスを呼び出して、為替交換レートを調べる場合を考えます。
この例では、次の要素を持つ単純なフォームを作成しました。
フォームを設定したら、ボタンのプロパティを設定して、onClickハンドラが次の関数を呼び出すようにできます。
この例では、フェッチ要求のための完全なURLを構築することから始めます。URLは、サービスのアドレスおよびいくつかのクエリパラメータで構成されます。簡単のために、常に米ドルを換算するため、基本パラメータの値はUSDにハードコードされます。シンボルパラメータの値は、フォームからプルされます。次に、関数は実際の要求を行います。応答を受信すると、渡されたシンボルの変換率をプルし、それをラベルのテキストとして設定します。
注意:
特定のCORS(オリジン間リソース共有)要求は、ブラウザから発信される場合に制限されます。通常、GET要求および特定のPOST要求は、サイトのパブリック、ページ、またはサイトコードから作成できます。他のすべての要求は、サイトのバックエンドコードから行う必要があります。無効な要求はエラーを引き起こします。これはブラウザの開発者ツールを使用して確認できます。CORSの制限によりフェッチ呼び出しで問題が発生している場合は、以下に説明するように呼び出しをバックエンドに移動します。
例えば、サードパーティのサービスを呼び出して、為替交換レートを調べる場合を考えます。
この例では、次の要素を持つ単純なフォームを作成しました。
フォームを設定したら、ボタンのプロパティを設定して、onClickハンドラが次の関数を呼び出すようにできます。
この例では、フェッチ要求のための完全なURLを構築することから始めます。URLは、サービスのアドレスおよびいくつかのクエリパラメータで構成されます。簡単のために、常に米ドルを換算するため、基本パラメータの値はUSDにハードコードされます。シンボルパラメータの値は、フォームからプルされます。次に、関数は実際の要求を行います。応答を受信すると、渡されたシンボルの変換率をプルし、それをラベルのテキストとして設定します。
注意:
特定のCORS(オリジン間リソース共有)要求は、ブラウザから発信される場合に制限されます。通常、GET要求および特定のPOST要求は、サイトのパブリック、ページ、またはサイトコードから作成できます。他のすべての要求は、サイトのバックエンドコードから行う必要があります。無効な要求はエラーを引き起こします。これはブラウザの開発者ツールを使用して確認できます。CORSの制限によりフェッチ呼び出しで問題が発生している場合は、以下に説明するように呼び出しをバックエンドに移動します。
バックエンドサービスの呼び出し
バックエンドからのサービス呼び出しは、2つのパートで行われます。まず、バックエンドウェブモジュールでサービス呼び出しを行うコードを記述します。これにより、APIキーの公開などのセキュリティ上の懸念が回避され、
例えば、サードパーティの気象サービスを呼び出して、ユーザが選択した都市の現在の天気を見つけることを考えます。
まず、気象サービスを呼び出してデータを取得する関数をバックエンドウェブモジュールに作成します。
この例では、wix-fetchからfetchをインポートすることから始めます。これはhttps要求を行うために使用されます。次に、天気を調べたい都市を取り込む新しい関数を作成します。関数は、フェッチ要求のための完全なURLを構築することから始まります。URLは、サービスのアドレスおよびAPIキーで構成されます。この例を機能させるには、<api key placeholder>を独自のAPIキーに置き換える必要があります。次に、関数は実際の要求を行います。応答を受信すると、温度データを引き出します。その温度データは、クライアントサイドの呼び出しによって受け取られます。
クライアントサイドでは、バックエンド関数を呼び出す場所と、返されるデータをどう処理するかを決定する必要があります。
この例では、次の要素を持つ単純なフォームを作成しました。
フォームを設定したら、ボタンのプロパティを設定して、onClickハンドラがバックエンドモジュールに記述した関数を呼び出すようにできます。
//フォームのページコード
ここではバックエンドで記述した関数をインポートすることから始めます。次に、ボタンのイベントハンドラでgetCurrentTemp関数を呼び出します。入力要素の値は、都市の引数として渡されます。関数の実行が終了したら、返された温度を表示するテキストラベルを設定します。
バックエンドからのサービス呼び出しは、2つのパートで行われます。まず、バックエンドウェブモジュールでサービス呼び出しを行うコードを記述します。これにより、APIキーの公開などのセキュリティ上の懸念が回避され、
例えば、サードパーティの気象サービスを呼び出して、ユーザが選択した都市の現在の天気を見つけることを考えます。
まず、気象サービスを呼び出してデータを取得する関数をバックエンドウェブモジュールに作成します。
この例では、wix-fetchからfetchをインポートすることから始めます。これはhttps要求を行うために使用されます。次に、天気を調べたい都市を取り込む新しい関数を作成します。関数は、フェッチ要求のための完全なURLを構築することから始まります。URLは、サービスのアドレスおよびAPIキーで構成されます。この例を機能させるには、<api key placeholder>を独自のAPIキーに置き換える必要があります。次に、関数は実際の要求を行います。応答を受信すると、温度データを引き出します。その温度データは、クライアントサイドの呼び出しによって受け取られます。
クライアントサイドでは、バックエンド関数を呼び出す場所と、返されるデータをどう処理するかを決定する必要があります。
この例では、次の要素を持つ単純なフォームを作成しました。
フォームを設定したら、ボタンのプロパティを設定して、onClickハンドラがバックエンドモジュールに記述した関数を呼び出すようにできます。
//フォームのページコード
ここではバックエンドで記述した関数をインポートすることから始めます。次に、ボタンのイベントハンドラでgetCurrentTemp関数を呼び出します。入力要素の値は、都市の引数として渡されます。関数の実行が終了したら、返された温度を表示するテキストラベルを設定します。
関連するコンテンツ
ウェブモジュールでフロントエンドからサーバサイドコードを呼び出す
ウェブモジュールでフロントエンドからサーバサイドコードを呼び出す
←すべてのトピック
動的ページ
記事
>動的ページについて
>動的ページが必要な場合とは
>動的ページタイプを選択するには
>動的アイテムページを追加するには
>動的カテゴリページを追加するには
>動的ページデータセット設定を使う
>動的ページをプレビューする
>動的ページにリンクする
>動的ページを削除する
>動的ページと通常ページとを変換するには
>動的ページURLを作成する
>動的ページおよび動的ページが表示するアイテムについて
>複数の動的ページURLを一意にする
>URLプレフィックスおよび動的ページのページグループ化について
>動的ページのためのSEO設定
>動的ページのためのページ情報設定
>モバイルビューで動的ページのためのページ設定を使う
>計算されたフィールドについて
動的ページ
記事
>動的ページについて
>動的ページが必要な場合とは
>動的ページタイプを選択するには
>動的アイテムページを追加するには
>動的カテゴリページを追加するには
>動的ページデータセット設定を使う
>動的ページをプレビューする
>動的ページにリンクする
>動的ページを削除する
>動的ページと通常ページとを変換するには
>動的ページURLを作成する
>動的ページおよび動的ページが表示するアイテムについて
>複数の動的ページURLを一意にする
>URLプレフィックスおよび動的ページのページグループ化について
>動的ページのためのSEO設定
>動的ページのためのページ情報設定
>モバイルビューで動的ページのためのページ設定を使う
>計算されたフィールドについて
ホーム>Wixコード>動的ページ
動的ページについて
Wixコードリソースセンターにアクセスし、さらに学びましょう。
動的ページを作成する場合、繰り返し使用でき、毎回データベースコレクションからの異なるアイテムを表示する1つのページレイアウトを設計します。動的ページは表示されるたびに異なるアイテムを表示するため、通常ページとは異なります。通常ページはその
コンテンツをページ自体に保存しますが、動的ページのためのコンテンツはデータベースコレクションに保存されます。
動的ページは次のような場合に役立ちます。
・ページを複製し、各ページのコンテンツまたはデザインを手動で変更している場合。動的ページを使用すると、アイテムを一度に1つずつ表示する、またはグループで複数のアイテムを表示する1つのページを作成できます。
・エディタで何も変更せずに、またはサイトのデザインを変更せずに、サイトのコンテンツを編集する場合。
動的ページには2つの種類があります。
・動的アイテムページ:コレクション内の1つのアイテムを表示するように設計されたページ。
・動的カテゴリページ:同じ基準に一致するすべてのコレクション内の複数のアイテムを表示するように設計されたページ。これらのアイテムは、リピータ、ギャラリー、またはテーブルに表示されます。
動的ページについて
Wixコードリソースセンターにアクセスし、さらに学びましょう。
動的ページを作成する場合、繰り返し使用でき、毎回データベースコレクションからの異なるアイテムを表示する1つのページレイアウトを設計します。動的ページは表示されるたびに異なるアイテムを表示するため、通常ページとは異なります。通常ページはその
コンテンツをページ自体に保存しますが、動的ページのためのコンテンツはデータベースコレクションに保存されます。
動的ページは次のような場合に役立ちます。
・ページを複製し、各ページのコンテンツまたはデザインを手動で変更している場合。動的ページを使用すると、アイテムを一度に1つずつ表示する、またはグループで複数のアイテムを表示する1つのページを作成できます。
・エディタで何も変更せずに、またはサイトのデザインを変更せずに、サイトのコンテンツを編集する場合。
動的ページには2つの種類があります。
・動的アイテムページ:コレクション内の1つのアイテムを表示するように設計されたページ。
・動的カテゴリページ:同じ基準に一致するすべてのコレクション内の複数のアイテムを表示するように設計されたページ。これらのアイテムは、リピータ、ギャラリー、またはテーブルに表示されます。
例
レシピサイトを作成していることを考えます。新しいデータベースコレクションを作成すると、タイトルフィールドがコレクションに自動的に追加されます。このフィールドを使用してレシピの名前を保存するとします。食事フィールドをコレクションに追加し、レシピが朝食、昼食、夕食のいずれであるかを記載します。また、レシピが前菜、メイン、デザートのいずれであるかを記載するコースフィールドを追加します。
次に、各レシピを独自のページに表示できるようにサイトを設計します。
この例では、個々のレシピを表示するページは動的アイテムページであり、食事に基づいてすべてのレシピを表示するページは動的カテゴリページです。
コレクションのいくつかのコンテンツを見て、これがどのように機能するかを見てみましょう。
ここで、このコンテンツが動的アイテムページにどのように表示されるかを見てみましょう。
注意:
この例では、動的ページの能力を使用して何ができるかを説明します。それらの設定方法については、「動的アイテムページを追加するには」および「動的カテゴリページを追加するには」を参照してください。
レシピサイトを作成していることを考えます。新しいデータベースコレクションを作成すると、タイトルフィールドがコレクションに自動的に追加されます。このフィールドを使用してレシピの名前を保存するとします。食事フィールドをコレクションに追加し、レシピが朝食、昼食、夕食のいずれであるかを記載します。また、レシピが前菜、メイン、デザートのいずれであるかを記載するコースフィールドを追加します。
次に、各レシピを独自のページに表示できるようにサイトを設計します。
この例では、個々のレシピを表示するページは動的アイテムページであり、食事に基づいてすべてのレシピを表示するページは動的カテゴリページです。
コレクションのいくつかのコンテンツを見て、これがどのように機能するかを見てみましょう。
ここで、このコンテンツが動的アイテムページにどのように表示されるかを見てみましょう。
注意:
この例では、動的ページの能力を使用して何ができるかを説明します。それらの設定方法については、「動的アイテムページを追加するには」および「動的カテゴリページを追加するには」を参照してください。
動的アイテムページ
コレクションから各アイテムを表示するには、動的アイテムページを作成します。これは次のようになります。
このレイアウトでは、実際のコンテンツが含まれている要素は見出し「レシピ」、「食事」、および「コース」のみであることに注意してください。これらの見出しの横(テキストに「<>」のついている部分)に表示されるコンテンツは、まだページに配置されていません。例えば、「<レシピのタイトル>」は、実際のレシピ名が表示されるテキストボックスのプレースホルダテキストに過ぎません。また、間にある画像は単なるプレースホルダ画像です(コレクションからの画像ではありません)。これらの要素が表示する実際のコンテンツは、コレクションから取得されます。
ここで、カップケーキレシピのこの動的アイテムページをプレビューしてみましょう。
プレースホルダのそれぞれがどのようにカップケーキレシピの具体的な情報に置き換えられたか、また画像がどのようにコレクションからのカップケーキ画像を表示しているか
に注目してください。
同じページでエッグベネディクトのレシピをプレビューし、プレースホルダのコンテンツの変更を確認できます。
ここで、このコンテンツが動的カテゴリページにどのように表示されるかを見てみましょう。
コレクションから各アイテムを表示するには、動的アイテムページを作成します。これは次のようになります。
このレイアウトでは、実際のコンテンツが含まれている要素は見出し「レシピ」、「食事」、および「コース」のみであることに注意してください。これらの見出しの横(テキストに「<>」のついている部分)に表示されるコンテンツは、まだページに配置されていません。例えば、「<レシピのタイトル>」は、実際のレシピ名が表示されるテキストボックスのプレースホルダテキストに過ぎません。また、間にある画像は単なるプレースホルダ画像です(コレクションからの画像ではありません)。これらの要素が表示する実際のコンテンツは、コレクションから取得されます。
ここで、カップケーキレシピのこの動的アイテムページをプレビューしてみましょう。
プレースホルダのそれぞれがどのようにカップケーキレシピの具体的な情報に置き換えられたか、また画像がどのようにコレクションからのカップケーキ画像を表示しているか
に注目してください。
同じページでエッグベネディクトのレシピをプレビューし、プレースホルダのコンテンツの変更を確認できます。
ここで、このコンテンツが動的カテゴリページにどのように表示されるかを見てみましょう。
動的カテゴリページ
選択した基準に基づいて、レシピの異なるグループを表示する動的カテゴリページを作成できます。
提供されている食事に基づいてレシピを表示できるページを作成することを考えます。テーブルを使用して、それらのレシピを表示できます。
アイテムページと同様に、この動的カテゴリページには実際のコンテンツはありません。ランチレシピをプレビューしたときの様子を見てみましょう。
選択した基準に基づいて、レシピの異なるグループを表示する動的カテゴリページを作成できます。
提供されている食事に基づいてレシピを表示できるページを作成することを考えます。テーブルを使用して、それらのレシピを表示できます。
アイテムページと同様に、この動的カテゴリページには実際のコンテンツはありません。ランチレシピをプレビューしたときの様子を見てみましょう。
動的ページにリンクする
動的ページはコンテンツを動的に表示するため、通常ページにリンクするのと同じ方法で動的ページにリンクすることはできません。詳しくは、「動的ページにリンクする」を参照してください。
ヒント:
下記の記事をご参照ください。
・動的ページURLを作成する
・動的ページおよび動的ページが表示するアイテムについて
・動的ページURLを一意にする
動的ページはコンテンツを動的に表示するため、通常ページにリンクするのと同じ方法で動的ページにリンクすることはできません。詳しくは、「動的ページにリンクする」を参照してください。
ヒント:
下記の記事をご参照ください。
・動的ページURLを作成する
・動的ページおよび動的ページが表示するアイテムについて
・動的ページURLを一意にする
関連するコンテンツ
動的ページURLを作成する
複数の動的ページURLを一意にする
データベースコレクションについて
動的ページおよび動的ページが表示するアイテムについて
動的ページにリンクする
動的ページURLを作成する
複数の動的ページURLを一意にする
データベースコレクションについて
動的ページおよび動的ページが表示するアイテムについて
動的ページにリンクする
ホーム>Wixコード>アドバンスト
データフックについて
データフックは、サイトのコレクションとの特定のやり取りの前後にコードを実行します。データフックを使用すると、やり取りの発生の直前または直後にやり取りをインターセプトできます。フックのコードは、やり取り自体に影響を与えるためにも使用できます。例えば、アイテムをコレクションに追加する前にアイテムをインターセプトして、最終検証を実行したり、実際にコレクションに入れるデータを微調整したりする場合があります。
一般的に、フックは、コレクションとのやり取りがページ要素によって開始されるか、データAPIを使用してプログラムで開始されるかに関係なく実行されます。しかしながら、サイトのバックエンドコードからのデータAPI呼び出しは、オプションのWixDataOptionsオブジェクトを渡し、それを使用して、その特定のやり取りでフックが呼び出されないようにします。
データフックについて
データフックは、サイトのコレクションとの特定のやり取りの前後にコードを実行します。データフックを使用すると、やり取りの発生の直前または直後にやり取りをインターセプトできます。フックのコードは、やり取り自体に影響を与えるためにも使用できます。例えば、アイテムをコレクションに追加する前にアイテムをインターセプトして、最終検証を実行したり、実際にコレクションに入れるデータを微調整したりする場合があります。
一般的に、フックは、コレクションとのやり取りがページ要素によって開始されるか、データAPIを使用してプログラムで開始されるかに関係なく実行されます。しかしながら、サイトのバックエンドコードからのデータAPI呼び出しは、オプションのWixDataOptionsオブジェクトを渡し、それを使用して、その特定のやり取りでフックが呼び出されないようにします。
フックタイプ
データのやり取りのライフサイクルには、フックできるいくつかの異なるポイントがあります。異なるフックは異なる引数を受け取り、異なる値を返します。詳しくは、「データAPI参照」を参照してください。
・item:現在のアイテム。例えば、beforeInsertでは、これは挿入されようとしているアイテムです。例えば、afterQueryで発生する可能性があるような多くのアイテムがある場合、フック関数はアイテムごとに1回繰り返し呼び出されます。
・itemId:現在のアイテムのID値。
・query:実行されるWixDataQueryオブジェクト。
・count:カウントにおけるアイテムの数。
・error:エラーオブジェクト。
データのやり取りのライフサイクルには、フックできるいくつかの異なるポイントがあります。異なるフックは異なる引数を受け取り、異なる値を返します。詳しくは、「データAPI参照」を参照してください。
・item:現在のアイテム。例えば、beforeInsertでは、これは挿入されようとしているアイテムです。例えば、afterQueryで発生する可能性があるような多くのアイテムがある場合、フック関数はアイテムごとに1回繰り返し呼び出されます。
・itemId:現在のアイテムのID値。
・query:実行されるWixDataQueryオブジェクト。
・count:カウントにおけるアイテムの数。
・error:エラーオブジェクト。
関連するコンテンツ
データフックを使うには
データAPIを使う
データフックを使うには
データAPIを使う
ホーム>Wixコード>アドバンスト
データバインディングルータフックについて
動的ページのうちの1つに要求が到来すると、ルータは要求のURLを使用して、表示するページとページのデータセットにバインドするデータを決定します。データバインディングルータフックを追加して、特定のポイントでこのプロセスをインターセプトし、追加のロジックを挿入できます。いくつかのフックをルータページでも使用できます。
データバインディングルータフックについて
動的ページのうちの1つに要求が到来すると、ルータは要求のURLを使用して、表示するページとページのデータセットにバインドするデータを決定します。データバインディングルータフックを追加して、特定のポイントでこのプロセスをインターセプトし、追加のロジックを挿入できます。いくつかのフックをルータページでも使用できます。
フック
データバインディングルータフックはrouters.jsファイルで定義されます。このファイルは、サイト構造サイドバーのバックエンドセクションにあります。
フック関数は、次の規則にしたがって命名されます。
ルータプレフィックスは、動的ページを作成する際に選択するURLの最初の部分です。動的ページのURLは、ページの設定で確認できます。
例えば、/dishes/nameというURLのページがあり、beforeRouterフックを作成する場合、関数は次のようになります。
//関数コード
・beforeRouter
・customizeQuery
・afterRouter
・afterSitemap
フック関数の詳細については、「ルータAPI参照」を参照してください。
サイトのコレクションとの特定のやり取りの前後にコードを実行するデータフックを登録することもできます。登録した場合、データフックはcustomizeQuery()とafterRouter()との間で実行されます。
データバインディングルータフックはrouters.jsファイルで定義されます。このファイルは、サイト構造サイドバーのバックエンドセクションにあります。
フック関数は、次の規則にしたがって命名されます。
ルータプレフィックスは、動的ページを作成する際に選択するURLの最初の部分です。動的ページのURLは、ページの設定で確認できます。
例えば、/dishes/nameというURLのページがあり、beforeRouterフックを作成する場合、関数は次のようになります。
//関数コード
・beforeRouter
・customizeQuery
・afterRouter
・afterSitemap
フック関数の詳細については、「ルータAPI参照」を参照してください。
サイトのコレクションとの特定のやり取りの前後にコードを実行するデータフックを登録することもできます。登録した場合、データフックはcustomizeQuery()とafterRouter()との間で実行されます。
beforeRouter()
このフックは、ルータが要求されたページに移動する前にトリガされます。このフックを使用して、要求を異なるページにルーティングしたり、エラー応答を返したりできます。例えば、誰がページを要求しているかを確認し、ユーザの役割に基づいて、ルータに次のステップを続行させるか、エラータイプの応答コードを返すかを決定できます。
このフックは、ルータが要求されたページに移動する前にトリガされます。このフックを使用して、要求を異なるページにルーティングしたり、エラー応答を返したりできます。例えば、誰がページを要求しているかを確認し、ユーザの役割に基づいて、ルータに次のステップを続行させるか、エラータイプの応答コードを返すかを決定できます。
customizeQuery()
このフックは、ページのデータクエリが実行される前にトリガされます。このフックを使用して、ページのデータセットにバインドされるデータを判定するクエリをさらに調整または変更できます。例えば、ステータスフィールドがアクティブに設定されているアイテムのみを返すようにクエリをフィルタリングできます。
このフックは、ページのデータクエリが実行される前にトリガされます。このフックを使用して、ページのデータセットにバインドされるデータを判定するクエリをさらに調整または変更できます。例えば、ステータスフィールドがアクティブに設定されているアイテムのみを返すようにクエリをフィルタリングできます。
afterRouter()
このフックは、ルータがデータをバインドした後、ページが表示される前にトリガされます。このフックを使用して、取得したデータに基づいてルータの応答を変更できます。例えば、ページの2つのバージョン、すなわち、縦長画像のためのページと横長画像のためのページとを持つことができます。データベースから画像をプルした後、画像の向きに対応するページを表示できます。
このフックは、ルータがデータをバインドした後、ページが表示される前にトリガされます。このフックを使用して、取得したデータに基づいてルータの応答を変更できます。例えば、ページの2つのバージョン、すなわち、縦長画像のためのページと横長画像のためのページとを持つことができます。データベースから画像をプルした後、画像の向きに対応するページを表示できます。
afterSitemap()
このフックは、サイトマップが作成された後にトリガされます。このフックを使用して、サイトマップ内のページのリストを修正できます。例えば、サイトマップに検索ページの情報を追加できます。
このフックは、サイトマップが作成された後にトリガされます。このフックを使用して、サイトマップ内のページのリストを修正できます。例えば、サイトマップに検索ページの情報を追加できます。
ホーム>Wixコード>アドバンスト
データバインディングルータフックを作成する
データバインディングルータフックを作成することにより、動的ページのデータがページにバインドされるプロセスをインターセプトできます。
この記事では、データバインディングルータを機能させるために記述する必要があるコードを説明します。データバインディングルータフックとは何か、またデータバインディングルータフックを作成するべき理由についての詳細は、「データバインディングルータフックについて」を参照してください。
データバインディングルータフックを作成する
データバインディングルータフックを作成することにより、動的ページのデータがページにバインドされるプロセスをインターセプトできます。
この記事では、データバインディングルータを機能させるために記述する必要があるコードを説明します。データバインディングルータフックとは何か、またデータバインディングルータフックを作成するべき理由についての詳細は、「データバインディングルータフックについて」を参照してください。
データバインディングルータフックを追加する
データバインディングルータフックを追加するには、
1.サイト構造サイドバーで動的ページのうちの1つにカーソルを合わせると表示される設定アイコンをクリックし、[設定]をクリックしてページのページ情報設定を表示します。
2.[その他の機能]で、[フックの追加]をクリックして[フックの追加]ダイアログを表示します。
3.[フックの追加]ダイアログにおいて、追加するフックを選択し、[コードの追加と編集]をクリックします。
データバインディングルータフックを追加すると、選択したデータバインディングルータフックの関数スタブがrouters.jsファイルに追加されます。routers.jsファイルは、サイト構造サイドバーのバックエンドセクションにあります。
データバインディングルータフック関数は、次の規則にしたがって命名されます。
したがって、動的ページにmyPrefixというプレフィックスがある場合、beforeRouterフックのrouters.jsファイルに追加されるコードは次のようになります。
//コードをルーティングします。
登録できるフックを実行される順序で次にリストします。
・beforeRouter
・customizeQuery
・afterRouter
・afterSitemap
フック関数の詳細については、「ルータAPI参照」を参照してください。
サイトのコレクションとの特定のやり取りの前後にコードを実行するデータフックを登
録することもできます。登録した場合、データフックはcustomizeQuery()とafterRouter()との間で実行されます。
データバインディングルータフックを追加するには、
1.サイト構造サイドバーで動的ページのうちの1つにカーソルを合わせると表示される設定アイコンをクリックし、[設定]をクリックしてページのページ情報設定を表示します。
2.[その他の機能]で、[フックの追加]をクリックして[フックの追加]ダイアログを表示します。
3.[フックの追加]ダイアログにおいて、追加するフックを選択し、[コードの追加と編集]をクリックします。
データバインディングルータフックを追加すると、選択したデータバインディングルータフックの関数スタブがrouters.jsファイルに追加されます。routers.jsファイルは、サイト構造サイドバーのバックエンドセクションにあります。
データバインディングルータフック関数は、次の規則にしたがって命名されます。
したがって、動的ページにmyPrefixというプレフィックスがある場合、beforeRouterフックのrouters.jsファイルに追加されるコードは次のようになります。
//コードをルーティングします。
登録できるフックを実行される順序で次にリストします。
・beforeRouter
・customizeQuery
・afterRouter
・afterSitemap
フック関数の詳細については、「ルータAPI参照」を参照してください。
サイトのコレクションとの特定のやり取りの前後にコードを実行するデータフックを登
録することもできます。登録した場合、データフックはcustomizeQuery()とafterRouter()との間で実行されます。
beforeRouter()
このフックは、ルータが要求された動的ページに移動する前にトリガされます。このフックを使用して、要求を異なるページにルーティングしたり、エラー応答を返したりできます。正しい応答を判定するためにページにバインドされるデータが必要な場合は、代わりにafterRouter()フックを使用します。
beforeRouter()フックは、到来する要求に関する情報を含むWixRouterRequestオブジェクトを受け取ります。オブジェクトには、ルータに到達するために使用されるURL、要求の送信場所、要求の送信者に関する情報が含まれています。
フックのボディ内で、必要なコードを記述できます。そこに記述するコードは、要求への応答方法を判定するのに役立ちます。
この関数は、ルータにルーティングを継続させる、またはHTTP応答コードで応答させるWixRouterResponseオブジェクトを返す必要があります。
ルータが同じデータで元々進んでいた同じページに進むようにするには、next()関数を使用して適切なWixRouterResponseを返します。
しかしながら、フックに到達する前に元々行っていた以外のことをルータに実行させる場合は、forbidden()関数、notFound()関数、redirect()関数、またはsendStatus()関数を使用してWixRouterResponseを返すことができます。
この例では、特定の要求が目的のターゲットにルーティングされるのを制限するフックを動的プレフィックスに作成します。
次のコードは、ウェブサイトのバックエンドセクションのrouters.jsファイルに配置されます。
データバインディングルータフックを作成するために使用されるフック機能は、ルータAPIに含まれています。この機能のうちのいくつかを使用するには、これをインポートする必要があります。
ここでは、forbidden()関数およびnext()関数をインポートします。
ルータAPIからの機能をさらに使用する場合は、それをimport文に追加する必要があります。
フック関数では、パスが文字列「admin」で始まるか否かを確認することから始めます。
ただし、パスが「admin」で始まる場合、どのタイプのユーザが要求を行っているかを確認します。
ユーザがサイトの所有者である場合は、フックによってインターセプトされる前に、ルータが移動していた場所に進むようにもう一度ルータに指示します。
しかし、ユーザがサイトの所有者ではない場合、403応答を返します。
このフックは、ルータが要求された動的ページに移動する前にトリガされます。このフックを使用して、要求を異なるページにルーティングしたり、エラー応答を返したりできます。正しい応答を判定するためにページにバインドされるデータが必要な場合は、代わりにafterRouter()フックを使用します。
beforeRouter()フックは、到来する要求に関する情報を含むWixRouterRequestオブジェクトを受け取ります。オブジェクトには、ルータに到達するために使用されるURL、要求の送信場所、要求の送信者に関する情報が含まれています。
フックのボディ内で、必要なコードを記述できます。そこに記述するコードは、要求への応答方法を判定するのに役立ちます。
この関数は、ルータにルーティングを継続させる、またはHTTP応答コードで応答させるWixRouterResponseオブジェクトを返す必要があります。
ルータが同じデータで元々進んでいた同じページに進むようにするには、next()関数を使用して適切なWixRouterResponseを返します。
しかしながら、フックに到達する前に元々行っていた以外のことをルータに実行させる場合は、forbidden()関数、notFound()関数、redirect()関数、またはsendStatus()関数を使用してWixRouterResponseを返すことができます。
この例では、特定の要求が目的のターゲットにルーティングされるのを制限するフックを動的プレフィックスに作成します。
次のコードは、ウェブサイトのバックエンドセクションのrouters.jsファイルに配置されます。
データバインディングルータフックを作成するために使用されるフック機能は、ルータAPIに含まれています。この機能のうちのいくつかを使用するには、これをインポートする必要があります。
ここでは、forbidden()関数およびnext()関数をインポートします。
ルータAPIからの機能をさらに使用する場合は、それをimport文に追加する必要があります。
フック関数では、パスが文字列「admin」で始まるか否かを確認することから始めます。
ただし、パスが「admin」で始まる場合、どのタイプのユーザが要求を行っているかを確認します。
ユーザがサイトの所有者である場合は、フックによってインターセプトされる前に、ルータが移動していた場所に進むようにもう一度ルータに指示します。
しかし、ユーザがサイトの所有者ではない場合、403応答を返します。
customizeQuery()
このフックは、ページのデータクエリが実行される前にトリガされます。このフックを使用して、ページのデータセットにバインドされているデータを判定するクエリをさらに調整または変更できます。
customizeQuery()フックは、到来する要求に関する情報を含むWixRouterRequestオブジェクト、現在のルートを含む文字列、およびルーティングされるページのデータを取得するために使用されるクエリを含むWixDataQu
eryオブジェクトを受け取ります。
フックのボディ内で、必要なコードを記述できます。そこに記述するコードは、初期データを継続するか、何らかの方法で変更するかを判定するのに役立ちます。
関数は、ルーティングされるページに渡される最終データを取得するために使用されるWixDataQueryオブジェクトを返す必要があります。
ただし、ルータで異なるデータを使用する場合は、データAPIの関数を使用して現在のクエリを調整するか、新しいクエリを作成できます。
このフックは、ページのデータクエリが実行される前にトリガされます。このフックを使用して、ページのデータセットにバインドされているデータを判定するクエリをさらに調整または変更できます。
customizeQuery()フックは、到来する要求に関する情報を含むWixRouterRequestオブジェクト、現在のルートを含む文字列、およびルーティングされるページのデータを取得するために使用されるクエリを含むWixDataQu
eryオブジェクトを受け取ります。
フックのボディ内で、必要なコードを記述できます。そこに記述するコードは、初期データを継続するか、何らかの方法で変更するかを判定するのに役立ちます。
関数は、ルーティングされるページに渡される最終データを取得するために使用されるWixDataQueryオブジェクトを返す必要があります。
ただし、ルータで異なるデータを使用する場合は、データAPIの関数を使用して現在のクエリを調整するか、新しいクエリを作成できます。
例
この例では、アクティブなユーザのみを見つけるために特定の要求が目的のターゲットに特定のルートのためのクエリをフィルタリングするフックを動的プレフィックスに作成します。
次のコードは、ウェブサイトのバックエンドセクションのrouters.jsファイルに配置されます。
クエリを作成するために使用される機能は、データAPIに含まれています。この機能のうちのいくつかを使用するには、これをインポートする必要があります。
フック関数では、ルートがユーザを表示する動的ページに移動しているか否かを確認することから始めます。
そこに行く場合は、「アクティブ」ユーザのみを取得するようにクエリを調整します。
それ以外の場合は、受け取った同じクエリを返します。
このフックは、ルータがデータをバインドした後、ページが表示される前にトリガされます。このフックを使用して、取得したデータに基づいてルータの応答を変更できます。
afterRouter()フックは、到来する要求に関する情報を含むWixRouterRequestオブジェクトおよびルータの応答に関する情報を含むWixRouterResponseオブジェクトを受信します。
フックのボディ内で、必要なコードを記述できます。そこに記述するコードは、初期応答を継続するか、別の応答に変更するかを判定するのに役立ちます。
この関数は、ルータにルーティングを継続させる、またはHTTP応答コードで応答させるWixRouterResponseオブジェクトを返す必要があります。
ルータが同じデータで元々進んでいた同じページに進むようにするには、応答パラメータで関数が受け取ったオブジェクトを返します。
しかしながら、フックに到達する前に元々行っていた以外のことをルータに実行させる場合は、ok()関数、forbidden()関数、notFound()関数、redirect()関数、またはsendStatus()関数を使用してWixRouterResponseを返すことができます。ルータが元々ルーティングしようとしていたページとは異なるページ上のルータからのデータを使用するには、[ok()]関数を使用してページを選択し、そのページに元の応答からのresponse.dataおよびresponse.headerを渡すことができます。このユースケースの例については、以下を参照してください。
この例では、アクティブなユーザのみを見つけるために特定の要求が目的のターゲットに特定のルートのためのクエリをフィルタリングするフックを動的プレフィックスに作成します。
次のコードは、ウェブサイトのバックエンドセクションのrouters.jsファイルに配置されます。
クエリを作成するために使用される機能は、データAPIに含まれています。この機能のうちのいくつかを使用するには、これをインポートする必要があります。
フック関数では、ルートがユーザを表示する動的ページに移動しているか否かを確認することから始めます。
そこに行く場合は、「アクティブ」ユーザのみを取得するようにクエリを調整します。
それ以外の場合は、受け取った同じクエリを返します。
このフックは、ルータがデータをバインドした後、ページが表示される前にトリガされます。このフックを使用して、取得したデータに基づいてルータの応答を変更できます。
afterRouter()フックは、到来する要求に関する情報を含むWixRouterRequestオブジェクトおよびルータの応答に関する情報を含むWixRouterResponseオブジェクトを受信します。
フックのボディ内で、必要なコードを記述できます。そこに記述するコードは、初期応答を継続するか、別の応答に変更するかを判定するのに役立ちます。
この関数は、ルータにルーティングを継続させる、またはHTTP応答コードで応答させるWixRouterResponseオブジェクトを返す必要があります。
ルータが同じデータで元々進んでいた同じページに進むようにするには、応答パラメータで関数が受け取ったオブジェクトを返します。
しかしながら、フックに到達する前に元々行っていた以外のことをルータに実行させる場合は、ok()関数、forbidden()関数、notFound()関数、redirect()関数、またはsendStatus()関数を使用してWixRouterResponseを返すことができます。ルータが元々ルーティングしようとしていたページとは異なるページ上のルータからのデータを使用するには、[ok()]関数を使用してページを選択し、そのページに元の応答からのresponse.dataおよびresponse.headerを渡すことができます。このユースケースの例については、以下を参照してください。
例
この例では、2つのページのうちの1つにユーザをルーティングするフックを動的プレフィックスに作成します。ページの2つのバージョン、すなわち、水平方向の画像のためのページと垂直方向の画像のためのページとがあります。データベースから画像をプルした後、どの種類の写真を表示するかを確認し、画像の向きに対応するページにルーティングします。
次のコードは、ウェブサイトのバックエンドセクションのrouters.jsファイルに配置されます。
データバインディングルータフックを作成するために使用されるフック機能は、ルータAPIに含まれています。この機能のうちのいくつかを使用するには、これをインポートする必要があります。
ここでok()関数をインポートします。
ルータAPIからの機能をさらに使用する場合は、それをimport文に追加する必要があります。
フック関数では、応答ステータスがOKステータスであり、応答のルーティング先のページが水平方向の写真を表示するページであるかどうかを確認することから始めます。
他のステータスを見つけた場合、または応答しているページが2つのバージョンを持つページではない場合、単に元の応答を返します。
ただし、ルータが水平方向の画像を表示するページにルーティングしようとしている場合、ページに表示される画像の向きを確認します。それには向きを取得します。
写真の向きが送信先のページと一致しない場合、その向きと一致する別のページにルーティングし、元の応答からデータおよびヘッド情報を取得して、新しいページにも送信します。
しかし、写真の向きが送信先のページと既に一致している場合は、そのままの送信先に送信します。
この例では、2つのページのうちの1つにユーザをルーティングするフックを動的プレフィックスに作成します。ページの2つのバージョン、すなわち、水平方向の画像のためのページと垂直方向の画像のためのページとがあります。データベースから画像をプルした後、どの種類の写真を表示するかを確認し、画像の向きに対応するページにルーティングします。
次のコードは、ウェブサイトのバックエンドセクションのrouters.jsファイルに配置されます。
データバインディングルータフックを作成するために使用されるフック機能は、ルータAPIに含まれています。この機能のうちのいくつかを使用するには、これをインポートする必要があります。
ここでok()関数をインポートします。
ルータAPIからの機能をさらに使用する場合は、それをimport文に追加する必要があります。
フック関数では、応答ステータスがOKステータスであり、応答のルーティング先のページが水平方向の写真を表示するページであるかどうかを確認することから始めます。
他のステータスを見つけた場合、または応答しているページが2つのバージョンを持つページではない場合、単に元の応答を返します。
ただし、ルータが水平方向の画像を表示するページにルーティングしようとしている場合、ページに表示される画像の向きを確認します。それには向きを取得します。
写真の向きが送信先のページと一致しない場合、その向きと一致する別のページにルーティングし、元の応答からデータおよびヘッド情報を取得して、新しいページにも送信します。
しかし、写真の向きが送信先のページと既に一致している場合は、そのままの送信先に送信します。
afterSitemap()
このフックは、サイトマップが作成された後にトリガされます。このフックを使用して、サイトマップ内のページのリストを修正できます。
afterSitemap()フックは、到来する要求に関する情報を含むWixRo
uterSitemapRequestオブジェクト、およびサイトマップのエントリを含むWixRouterSitemapEntry配列を受け取ります。
フックのボディ内で、必要なコードを記述できます。そこに記述するコードは、初期サイトマップエントリを継続するか、何らかの方法で変更するかを判定するのに役立ちます。
関数は、サイトマップのすべてのエントリを含むWixRouterSitemapEntry配列を返す必要があります。
フックが受信したのと同じサイトマップエントリでルータを続行する場合は、関数がsitemapEntriesパラメータで受け取ったオブジェクトを返します。
ただし、ルータでサイトマップエントリを修正する場合は、標準のJavaScript配列処理方法を使用して、受信した配列のエントリを追加、除去、または修正できます。
この例では、サイトマップに検索ページを追加するフックを動的プレフィックスに作成します。サイトマップ関数は、検索ページのURLのみを公開することに注意してください。このURLにページを実際に実装するには、beforeRouter()フックを使用して、検索ページURLの要求を確認し、ユーザを検索ページにルーティングします。
次のコードは、ウェブサイトのバックエンドセクションのrouters.jsファイルに配置されます。
サイトマップエントリを作成するために使用される機能は、ルータAPIに含まれています。この機能のうちのいくつかを使用するには、これをインポートする必要があります。
ここでWixRouterSitemapEntryをインポートします。
フック関数では、要求のプレフィックスを取得することから始めます。
次に、検索ページの新しいエントリを作成します。
そして、新しいエントリをサイトマップエントリの配列に追加します。
最後に、エントリの配列をPromiseにラップして返します。
このフックは、サイトマップが作成された後にトリガされます。このフックを使用して、サイトマップ内のページのリストを修正できます。
afterSitemap()フックは、到来する要求に関する情報を含むWixRo
uterSitemapRequestオブジェクト、およびサイトマップのエントリを含むWixRouterSitemapEntry配列を受け取ります。
フックのボディ内で、必要なコードを記述できます。そこに記述するコードは、初期サイトマップエントリを継続するか、何らかの方法で変更するかを判定するのに役立ちます。
関数は、サイトマップのすべてのエントリを含むWixRouterSitemapEntry配列を返す必要があります。
フックが受信したのと同じサイトマップエントリでルータを続行する場合は、関数がsitemapEntriesパラメータで受け取ったオブジェクトを返します。
ただし、ルータでサイトマップエントリを修正する場合は、標準のJavaScript配列処理方法を使用して、受信した配列のエントリを追加、除去、または修正できます。
この例では、サイトマップに検索ページを追加するフックを動的プレフィックスに作成します。サイトマップ関数は、検索ページのURLのみを公開することに注意してください。このURLにページを実際に実装するには、beforeRouter()フックを使用して、検索ページURLの要求を確認し、ユーザを検索ページにルーティングします。
次のコードは、ウェブサイトのバックエンドセクションのrouters.jsファイルに配置されます。
サイトマップエントリを作成するために使用される機能は、ルータAPIに含まれています。この機能のうちのいくつかを使用するには、これをインポートする必要があります。
ここでWixRouterSitemapEntryをインポートします。
フック関数では、要求のプレフィックスを取得することから始めます。
次に、検索ページの新しいエントリを作成します。
そして、新しいエントリをサイトマップエントリの配列に追加します。
最後に、エントリの配列をPromiseにラップして返します。
ホーム>Wixコード>データを接続する
リピータに動的コンテンツを表示する
Wixコードリソースセンターにアクセスし、さらに学びましょう。
リピータは、同じレイアウトを使用して複数のアイテムを表示する要素です。好みのレイアウトを作成すると、各リピータアイテムはその同じレイアウトを使用して異なるコンテンツを表示します。
リピータアイテムはコンテナのように機能します。他の要素をリピータ要素にアタッチします。1つのリピータアイテムに加えた変更は、他のすべてのアイテムに自動的に反映されます。
注意:
リピータレイアウトを設計するときに、テキスト、画像、図形、ボックス、ボタン、ギャラリー、およびテーブルなどの要素を使用できます。
リピータを使用して静的コンテンツを表示できます。つまり、エディタにおいて各アイテムの各要素のコンテンツを手動で決定できます。
また、データベースコレクションからのコンテンツを動的に表示するには、リピータおよびそれにアタッチされた要素をデータセットに接続します。リピータには、コレクション内のアイテムごとに1つのアイテムが含まれ、各リピータアイテムは同じテンプレートを使用しますが、異なるコンテンツを表示します。データセット設定で一度に表示されるアイテムの数を制御します。
以下は、いくつかの可能性を示す例です。
リピータに動的コンテンツを表示する
Wixコードリソースセンターにアクセスし、さらに学びましょう。
リピータは、同じレイアウトを使用して複数のアイテムを表示する要素です。好みのレイアウトを作成すると、各リピータアイテムはその同じレイアウトを使用して異なるコンテンツを表示します。
リピータアイテムはコンテナのように機能します。他の要素をリピータ要素にアタッチします。1つのリピータアイテムに加えた変更は、他のすべてのアイテムに自動的に反映されます。
注意:
リピータレイアウトを設計するときに、テキスト、画像、図形、ボックス、ボタン、ギャラリー、およびテーブルなどの要素を使用できます。
リピータを使用して静的コンテンツを表示できます。つまり、エディタにおいて各アイテムの各要素のコンテンツを手動で決定できます。
また、データベースコレクションからのコンテンツを動的に表示するには、リピータおよびそれにアタッチされた要素をデータセットに接続します。リピータには、コレクション内のアイテムごとに1つのアイテムが含まれ、各リピータアイテムは同じテンプレートを使用しますが、異なるコンテンツを表示します。データセット設定で一度に表示されるアイテムの数を制御します。
以下は、いくつかの可能性を示す例です。
例
次の図のように、すべてのレシピをコレクションに保存するレシピサイトがあるとします。図には、各料理の写真、料理法、提供するコースが含まれています。各レシピに関する情報を表示する動的アイテムページは既に作成されています。
2 チリコンカン メイン テキサス流メキシコ料理
3 チョコレートケーキ デザート グローバル
4 チョコレートケーキ乳成分不使用 デザート グローバル
5 チョコレートカップケーキ デザート グローバル
6 クレープ デザート フランス料理
7 クロワッサン サイド フランス料理
8 クロワッサンサンドイッチ メイン フランス料理
9 餃子 メイン 中国料理
10 エンチラーダ メイン テキサス流メキシコ料理
11 ファヒータ メイン テキサス流メキシコ料理
12 フレンチフライ サイド フランス料理
13 きのこのフジッリ メイン イタリア料理
14 ワカモレ サイド テキサス流メキシコ料理
ここで、リピータを使用してレシピをリストし、訪問者がリストをスクロールして興味のあるレシピを見つけることができるようにします。訪問者が料理の画像をクリックすると、そのアイテムの動的ページに移動します。以下の画像は、リピータがどのように見えるかを示しています。画像には、料理の写真、料理のタイトル、料理法、提供するコースが含まれています。写真はそのアイテムの動的ページにリンクしています。
ファヒータ フレンチフライ
メイン サイド
料理法:テキサス流メキシコ料理 料理法:フランス料理
きのこのフジッリ ワカモレ
メイン サイド
料理法:イタリア料理 料理法:テキサス流メキシコ料理
マカロン ナチョス
デザート メイン
料理法:フランス料理 料理法:テキサス流メキシコ料理
次の図のように、すべてのレシピをコレクションに保存するレシピサイトがあるとします。図には、各料理の写真、料理法、提供するコースが含まれています。各レシピに関する情報を表示する動的アイテムページは既に作成されています。
2 チリコンカン メイン テキサス流メキシコ料理
3 チョコレートケーキ デザート グローバル
4 チョコレートケーキ乳成分不使用 デザート グローバル
5 チョコレートカップケーキ デザート グローバル
6 クレープ デザート フランス料理
7 クロワッサン サイド フランス料理
8 クロワッサンサンドイッチ メイン フランス料理
9 餃子 メイン 中国料理
10 エンチラーダ メイン テキサス流メキシコ料理
11 ファヒータ メイン テキサス流メキシコ料理
12 フレンチフライ サイド フランス料理
13 きのこのフジッリ メイン イタリア料理
14 ワカモレ サイド テキサス流メキシコ料理
ここで、リピータを使用してレシピをリストし、訪問者がリストをスクロールして興味のあるレシピを見つけることができるようにします。訪問者が料理の画像をクリックすると、そのアイテムの動的ページに移動します。以下の画像は、リピータがどのように見えるかを示しています。画像には、料理の写真、料理のタイトル、料理法、提供するコースが含まれています。写真はそのアイテムの動的ページにリンクしています。
ファヒータ フレンチフライ
メイン サイド
料理法:テキサス流メキシコ料理 料理法:フランス料理
きのこのフジッリ ワカモレ
メイン サイド
料理法:イタリア料理 料理法:テキサス流メキシコ料理
マカロン ナチョス
デザート メイン
料理法:フランス料理 料理法:テキサス流メキシコ料理
リピータを追加および構成する
リピータアイテム内の既存の要素を移動し、不要な要素を除去します。また、新しい要素、具体的にはテキスト、画像、ボタン、ボックス、図形、ギャラリー、およびテーブルをリピータにアタッチすることもできます。
リピータの1つのアイテムのデザインまたは位置に加えた変更は、すべてのアイテムに自動的に反映されます。
以下の図は、エディタでのリピータの様子を示しています。リピータアイテムが2つしかないことに注意してください。リピータのサイズはデータセットから制御されるため、これ以上必要ありません。また、両方のリピータアイテムが同一であることに注意してください。
<料理の名前> <料理の名前>
<コース> <コース>
料理法:<料理法> 料理法:<料理法>
ヒント:
大きな要素を追加する場合、まずそれらをページに追加し、その後サイズを変更します。次に、それらをリピータ要素にドラッグします。[アイテムにアタッチ]が表示されたら、要素をドロップできます。
リピータアイテム内の既存の要素を移動し、不要な要素を除去します。また、新しい要素、具体的にはテキスト、画像、ボタン、ボックス、図形、ギャラリー、およびテーブルをリピータにアタッチすることもできます。
リピータの1つのアイテムのデザインまたは位置に加えた変更は、すべてのアイテムに自動的に反映されます。
以下の図は、エディタでのリピータの様子を示しています。リピータアイテムが2つしかないことに注意してください。リピータのサイズはデータセットから制御されるため、これ以上必要ありません。また、両方のリピータアイテムが同一であることに注意してください。
<料理の名前> <料理の名前>
<コース> <コース>
料理法:<料理法> 料理法:<料理法>
ヒント:
大きな要素を追加する場合、まずそれらをページに追加し、その後サイズを変更します。次に、それらをリピータ要素にドラッグします。[アイテムにアタッチ]が表示されたら、要素をドロップできます。
リピータをデータセットに接続する
動的コンテンツを表示するには、リピータをデータセットに接続する必要があります。
リピータがデータセットに接続されると、関連するコレクションから情報を取得できます。また、表示したいアイテムの数に合わせてサイズを調整します。これは、データセット設定パネルの[表示するアイテムの数]フィールドで制御します。以下を参照してください。
動的コンテンツを表示するには、リピータをデータセットに接続する必要があります。
リピータがデータセットに接続されると、関連するコレクションから情報を取得できます。また、表示したいアイテムの数に合わせてサイズを調整します。これは、データセット設定パネルの[表示するアイテムの数]フィールドで制御します。以下を参照してください。
アタッチされた要素をデータセットに接続する
次に、アタッチされた要素をデータセットに接続します。1つのアイテムのテンプレートに加えた変更は、すべてのアイテムに自動的に反映されることに注意してください。
各アイテムで同じのままであるラベルを使いたいとしましょう。それには、テキスト要素にテキストを入力してから、データセットに接続しないでおきます。
上記の例では、画像要素はコレクションの写真フィールドに接続され、そのレシピの動的アイテムページにリンクしています。<料理の名前>、<コース>、および<料理法>のテキスト要素は、コレクション内の対応するフィールドに接続されているため、動的コンテンツを表示できます。「料理法:」テキスト要素はどのデータセットにも接続されていないため、各リピータアイテムに同じテキストが表示されます。
次に、アタッチされた要素をデータセットに接続します。1つのアイテムのテンプレートに加えた変更は、すべてのアイテムに自動的に反映されることに注意してください。
各アイテムで同じのままであるラベルを使いたいとしましょう。それには、テキスト要素にテキストを入力してから、データセットに接続しないでおきます。
上記の例では、画像要素はコレクションの写真フィールドに接続され、そのレシピの動的アイテムページにリンクしています。<料理の名前>、<コース>、および<料理法>のテキスト要素は、コレクション内の対応するフィールドに接続されているため、動的コンテンツを表示できます。「料理法:」テキスト要素はどのデータセットにも接続されていないため、各リピータアイテムに同じテキストが表示されます。
リピータアイテムの背景画像を変更する
各アイテムに異なる背景画像を表示させるには、リピータアイテムの背景画像をデータセットの画像フィールドに接続します。以下の図は、背景画像がレシピコレクションの写真フィールドに接続されている場合のリピータの様子を示しています。レシピの名前およびレシピの動的アイテムページへのリンクを表示するボタンを追加してあります。
ファヒータ フレンチフライ
きのこのフジッリ ワカモレ
マカロン ナチョス
各アイテムに異なる背景画像を表示させるには、リピータアイテムの背景画像をデータセットの画像フィールドに接続します。以下の図は、背景画像がレシピコレクションの写真フィールドに接続されている場合のリピータの様子を示しています。レシピの名前およびレシピの動的アイテムページへのリンクを表示するボタンを追加してあります。
ファヒータ フレンチフライ
きのこのフジッリ ワカモレ
マカロン ナチョス
リピータをナビゲートする
デフォルトでリピータが表示するアイテムの数は、リピータに接続されているデータセットのデータセット設定によって制御されます。これはリピータ「ページ」と呼ばれます。
詳しくは、「ボタン接続パネルを使用する」を参照してください。
デフォルトでリピータが表示するアイテムの数は、リピータに接続されているデータセットのデータセット設定によって制御されます。これはリピータ「ページ」と呼ばれます。
詳しくは、「ボタン接続パネルを使用する」を参照してください。
複数のコレクションからの情報を表示する
リピータはまた、参照フィールドを持つコレクションの関連アイテムを表示したり、あるデータセットを別のデータセットでフィルタリングした状況で関連アイテムを表示したりできます。これにより、各リピータアイテムが「マスタ」として機能する「マスタ-詳細」プレゼンテーションを作成できます。マスタ-詳細ページの作成に関するアイデアについては、こちらをご覧ください。
リピータはまた、参照フィールドを持つコレクションの関連アイテムを表示したり、あるデータセットを別のデータセットでフィルタリングした状況で関連アイテムを表示したりできます。これにより、各リピータアイテムが「マスタ」として機能する「マスタ-詳細」プレゼンテーションを作成できます。マスタ-詳細ページの作成に関するアイデアについては、こちらをご覧ください。
関連するコンテンツ
データセット設定を使う
テーブルまたはギャラリーに動的コンテンツを表示する
データセット設定を使う
テーブルまたはギャラリーに動的コンテンツを表示する
ホーム>Wixコード>動的ページ
動的ページをプレビューする
Wixコードリソースセンターにアクセスし、さらに学びましょう。
動的ページを作成すると、エディタにプレビューパネルが表示されます。このパネルにはドロップダウンリストが含まれており、コレクションからプレビューするアイテムまたはカテゴリを選択できます。
ヒント:
プレビューパネルを閉じた場合に再度開くには、別のページに移動してからその動的ページに戻ります。
このドロップダウンリストには、この動的ページで表示できるコレクションからのアイテムのみが自動的に入力されます。動的アイテムページの場合、このリストにはコレクション内のすべてのアイテムが含まれます。動的カテゴリページの場合、このリストには、カテゴリページの作成に使用した基準に基づいて可能なすべての組み合わせが含まれます。
例えば、レシピサイトがあり、レシピのコースおよび食事をフィルタリングする動的カテゴリページを作成する場合、リストは次のようになります。
しかし、すべてのレシピのアイテムページのリストは次のようになります。
重要:
プレビューモードでは、管理者のパーミッションでサイトを表示しています。これはコンテンツの表示の仕方に影響し、サイト訪問者のエクスペリエンスと一致しない場合があります。
動的ページをプレビューする
Wixコードリソースセンターにアクセスし、さらに学びましょう。
動的ページを作成すると、エディタにプレビューパネルが表示されます。このパネルにはドロップダウンリストが含まれており、コレクションからプレビューするアイテムまたはカテゴリを選択できます。
ヒント:
プレビューパネルを閉じた場合に再度開くには、別のページに移動してからその動的ページに戻ります。
このドロップダウンリストには、この動的ページで表示できるコレクションからのアイテムのみが自動的に入力されます。動的アイテムページの場合、このリストにはコレクション内のすべてのアイテムが含まれます。動的カテゴリページの場合、このリストには、カテゴリページの作成に使用した基準に基づいて可能なすべての組み合わせが含まれます。
例えば、レシピサイトがあり、レシピのコースおよび食事をフィルタリングする動的カテゴリページを作成する場合、リストは次のようになります。
しかし、すべてのレシピのアイテムページのリストは次のようになります。
重要:
プレビューモードでは、管理者のパーミッションでサイトを表示しています。これはコンテンツの表示の仕方に影響し、サイト訪問者のエクスペリエンスと一致しない場合があります。
関連するコンテンツ
動的ページについて
Wixコードを使用してコードをテストおよびデバッグする
チェックリスト:コレクションのコンテンツと共にサイトを公開する
動的ページについて
Wixコードを使用してコードをテストおよびデバッグする
チェックリスト:コレクションのコンテンツと共にサイトを公開する
←すべてのトピック
データを接続する
記事
>データセットとデータの接続について
>データセット設定を使う
>エディタでデータセットを使う
>Wixコードを使用して要素にリンクを追加する様々な方法を理解する
>Wixコードで要素にリンクを追加するには
>テーブルまたはギャラリーに動的コンテンツを表示する
>リピータに動的コンテンツを表示する
>テーブル接続パネルを使う
>あるデータセットを別のデータセットでフィルタリングする
>データセットによりフィルタを作成するには
>テキスト接続パネルを使う
>ボタン接続パネルを使う
>画像接続パネルを使う
>ビデオプレーヤ接続パネルを使う
>リピータ接続パネルを使う
>リピータアイテム接続パネルを使う
>カラム接続パネルを使う
>ページ接続パネルを使う
>データシートのフィルタリングと並べ替え
>ストリップ接続パネルを使う
>ボタンおよび画像のためのデータセットアクション
>現在ログインしているユーザに基づいてページをフィルタリングするには
データを接続する
記事
>データセットとデータの接続について
>データセット設定を使う
>エディタでデータセットを使う
>Wixコードを使用して要素にリンクを追加する様々な方法を理解する
>Wixコードで要素にリンクを追加するには
>テーブルまたはギャラリーに動的コンテンツを表示する
>リピータに動的コンテンツを表示する
>テーブル接続パネルを使う
>あるデータセットを別のデータセットでフィルタリングする
>データセットによりフィルタを作成するには
>テキスト接続パネルを使う
>ボタン接続パネルを使う
>画像接続パネルを使う
>ビデオプレーヤ接続パネルを使う
>リピータ接続パネルを使う
>リピータアイテム接続パネルを使う
>カラム接続パネルを使う
>ページ接続パネルを使う
>データシートのフィルタリングと並べ替え
>ストリップ接続パネルを使う
>ボタンおよび画像のためのデータセットアクション
>現在ログインしているユーザに基づいてページをフィルタリングするには
ホーム>Wixコード>データを接続する
データセットとデータの接続について
・Wixコードリソースセンターにアクセスし、さらに学びましょう。
・この記事を全画面表示するにはここをクリックしてください。
注意:
データセットはエディタに要素として表示されますが、公開されたサイトには表示されません。
データの接続は、ページ要素をデータベースコレクションに接続するプロセスです。これにより次のことが可能になります。
・サイトページにコレクションのコンテンツを表示する。
・ユーザ入力をキャプチャしてコレクションに保存する。
データセットは以下を制御します。
・要素での使用に利用可能なコレクション
・要素がコレクション内のコンテンツでできること(表示、追加、既存のものの修正)。これは、コレクションのパーミッションの影響も受けます。詳しくは、「データセットモードおよびコレクションパーミッションを使う」を参照してください。
・表示されたコンテンツがフィルタリングされているか並べ替えされているか
データセットは、ページ上の要素とコレクションとの間のブリッジまたはコネクタと考えることができます。まずデータセットをコレクションに接続し、次に要素をデータセットに接続します。これにより、次の図に示すように、要素がコレクションに接続されます。
同じデータセットに接続されているページ上のすべての要素は、データセットで定義されているようにコレクションのコンテンツで機能します。データセットは、コレクション内のどのアイテムが現在フォーカスされているかも追跡します。これは、コレクションのコンテンツの表示の仕方、およびユーザ入力のキャプチャの仕方に影響します。いくつかの例を見て、これがどのように機能するかを見てみましょう。
データセットとデータの接続について
・Wixコードリソースセンターにアクセスし、さらに学びましょう。
・この記事を全画面表示するにはここをクリックしてください。
注意:
データセットはエディタに要素として表示されますが、公開されたサイトには表示されません。
データの接続は、ページ要素をデータベースコレクションに接続するプロセスです。これにより次のことが可能になります。
・サイトページにコレクションのコンテンツを表示する。
・ユーザ入力をキャプチャしてコレクションに保存する。
データセットは以下を制御します。
・要素での使用に利用可能なコレクション
・要素がコレクション内のコンテンツでできること(表示、追加、既存のものの修正)。これは、コレクションのパーミッションの影響も受けます。詳しくは、「データセットモードおよびコレクションパーミッションを使う」を参照してください。
・表示されたコンテンツがフィルタリングされているか並べ替えされているか
データセットは、ページ上の要素とコレクションとの間のブリッジまたはコネクタと考えることができます。まずデータセットをコレクションに接続し、次に要素をデータセットに接続します。これにより、次の図に示すように、要素がコレクションに接続されます。
同じデータセットに接続されているページ上のすべての要素は、データセットで定義されているようにコレクションのコンテンツで機能します。データセットは、コレクション内のどのアイテムが現在フォーカスされているかも追跡します。これは、コレクションのコンテンツの表示の仕方、およびユーザ入力のキャプチャの仕方に影響します。いくつかの例を見て、これがどのように機能するかを見てみましょう。
コンテンツを表示する
レストランのサイトで、訪問者がメニューのオプションをスクロールして閲覧できるようにする場合を考えます。メニューのすべてのアイテムのコレクションが用意できていて、それぞれのアイテムについて、次のものを表示しようとしています。
・料理の名前
・提供される場面
・前菜、メイン、またはデザートのいずれかである
・料理に関するアレルギー情報
・料理の写真
これらのアイテムを1つずつページに表示するように設計できますが、その前に、次のことをする必要があります。
・コレクション内の異なるアイテムを要素が表示するように、ページ上の要素を接続する。
コレクション内の特定のアイテムについては、すべての要素がその同じアイテムに対応する情報を表示している必要があります。
コレクション内の異なるアイテムを要素が表示するように、ページ上の要素を接続する。
要素をセットアップするには、ページに要素を追加して、[データに接続]アイコンを用いてそれらすべてを同じデータセットに接続します。また、コレクションからどのフィールドを表示するかを定義します。
訪問者が料理をスクロールできるボタンをページに追加する
訪問者がデータセット内の前または次のアイテムに移動できるように、ページにボタンを追加します。これらのボタンは、要素と同じデータセットに接続されている必要があります。
同期して変化するように要素を設定する
訪問者がページの前または次のボタンをクリックすると、すべての要素にコレクション内の同じアイテムに関するコンテンツが表示されます。これは、データセットが現在フォーカスされているアイテムを追跡し、同じデータセットに接続されているすべての要素が連携して動作するためです。要素の1つが現在フォーカスされているアイテムを変更すると、そのデータセットに接続されているすべての要素の要素が変更されます。
レストランのサイトで、訪問者がメニューのオプションをスクロールして閲覧できるようにする場合を考えます。メニューのすべてのアイテムのコレクションが用意できていて、それぞれのアイテムについて、次のものを表示しようとしています。
・料理の名前
・提供される場面
・前菜、メイン、またはデザートのいずれかである
・料理に関するアレルギー情報
・料理の写真
これらのアイテムを1つずつページに表示するように設計できますが、その前に、次のことをする必要があります。
・コレクション内の異なるアイテムを要素が表示するように、ページ上の要素を接続する。
コレクション内の特定のアイテムについては、すべての要素がその同じアイテムに対応する情報を表示している必要があります。
コレクション内の異なるアイテムを要素が表示するように、ページ上の要素を接続する。
要素をセットアップするには、ページに要素を追加して、[データに接続]アイコンを用いてそれらすべてを同じデータセットに接続します。また、コレクションからどのフィールドを表示するかを定義します。
訪問者が料理をスクロールできるボタンをページに追加する
訪問者がデータセット内の前または次のアイテムに移動できるように、ページにボタンを追加します。これらのボタンは、要素と同じデータセットに接続されている必要があります。
同期して変化するように要素を設定する
訪問者がページの前または次のボタンをクリックすると、すべての要素にコレクション内の同じアイテムに関するコンテンツが表示されます。これは、データセットが現在フォーカスされているアイテムを追跡し、同じデータセットに接続されているすべての要素が連携して動作するためです。要素の1つが現在フォーカスされているアイテムを変更すると、そのデータセットに接続されているすべての要素の要素が変更されます。
コンテンツをキャプチャする
訪問者が無料の夕食にサインアップできるようにするレストラン用のフォームを作成するとします。ユーザ入力要素を使用して、訪問者から必要な情報を収集するようにフォー
ムを設定します。
ここでも、[データに接続]アイコンを使用して、各要素を同じデータセットに接続します。また、訪問者が各入力要素に入力したデータを保存するために使用するコレクション内のフィールドを定義します。
ヒント:
ユーザがコレクションに書き込みできるように、コレクションおよびデータセットのパーミッションを設定することをお忘れなく。
また、送信ボタンを作成する必要があります。フォームへの入力が完了したら、訪問者はこのボタンをクリックして、コレクションに情報を送信します。
このボタンは、ユーザ入力要素と同じデータセットに接続される必要もあります。
これは、データセットがコレクション内の現在のアイテムを追跡するために機能します。この場合、データセットはコレクション内の新しい空のアイテムを指しています。すべての要素が同じデータセットに接続されているため、それらはすべて同じアイテムに保存されます。
訪問者が無料の夕食にサインアップできるようにするレストラン用のフォームを作成するとします。ユーザ入力要素を使用して、訪問者から必要な情報を収集するようにフォー
ムを設定します。
ここでも、[データに接続]アイコンを使用して、各要素を同じデータセットに接続します。また、訪問者が各入力要素に入力したデータを保存するために使用するコレクション内のフィールドを定義します。
ヒント:
ユーザがコレクションに書き込みできるように、コレクションおよびデータセットのパーミッションを設定することをお忘れなく。
また、送信ボタンを作成する必要があります。フォームへの入力が完了したら、訪問者はこのボタンをクリックして、コレクションに情報を送信します。
このボタンは、ユーザ入力要素と同じデータセットに接続される必要もあります。
これは、データセットがコレクション内の現在のアイテムを追跡するために機能します。この場合、データセットはコレクション内の新しい空のアイテムを指しています。すべての要素が同じデータセットに接続されているため、それらはすべて同じアイテムに保存されます。
動的ページデータセットについて
動的ページを作成すると、動的ページデータセットがページに自動的に追加されます。通常のデータセットと同様に、動的ページデータセットを使用すると、ページ要素をコレクションに接続できます。ただし、動的ページデータセットが通常のデータセットと異なる点がいくつかあります。
動的ページが表示できるコンテンツは、そのURLによって制御されます。このため、通常のデータセットとは異なり、動的ページデータセットでは、データセットが接続されるコレクションを変更できません。
URLはページが表示できるコンテンツを制御するため、コレクションのコンテンツのためのフィルタとしても機能します。ここでも、ページ設定でURL定義を変更することにより、コンテンツフィルタリングを変更します。動的ページデータセット設定を使用して、さらなるフィルタを追加したり、ページ上のコンテンツを並べ替えたりすることもできます。
また、ページから動的ページデータセットを削除することもできません。データセットを除去するには、動的ページを通常ページに変換する必要があります。
動的ページを作成すると、動的ページデータセットがページに自動的に追加されます。通常のデータセットと同様に、動的ページデータセットを使用すると、ページ要素をコレクションに接続できます。ただし、動的ページデータセットが通常のデータセットと異なる点がいくつかあります。
動的ページが表示できるコンテンツは、そのURLによって制御されます。このため、通常のデータセットとは異なり、動的ページデータセットでは、データセットが接続されるコレクションを変更できません。
URLはページが表示できるコンテンツを制御するため、コレクションのコンテンツのためのフィルタとしても機能します。ここでも、ページ設定でURL定義を変更することにより、コンテンツフィルタリングを変更します。動的ページデータセット設定を使用して、さらなるフィルタを追加したり、ページ上のコンテンツを並べ替えたりすることもできます。
また、ページから動的ページデータセットを削除することもできません。データセットを除去するには、動的ページを通常ページに変換する必要があります。
関連するコンテンツ
データベースコレクションについて
チュートリアル:データベースコレクションにユーザ入力を保存するフォームを作成する
データベースコレクションについて
チュートリアル:データベースコレクションにユーザ入力を保存するフォームを作成する
WCD-Wixコード
コード要素および検索エンジンサポートを組み込むウェブサイト構築システム
もくじ
はじめに 1
関連出願 2
背景技術 2
システムの説明およびアーキテクチャ 3
コンセプトの詳細 7
付属書類一覧 10
コード要素および検索エンジンサポートを組み込むウェブサイト構築システム
もくじ
はじめに 1
関連出願 2
背景技術 2
システムの説明およびアーキテクチャ 3
コンセプトの詳細 7
付属書類一覧 10
はじめに
1.本出願は、ウェブサイト構築システム(および他の視覚的編集システム)を対象とするものであり、検索エンジンによりインデックスされ得る、またSEOをサポートし得るウェブサイトを生成しながら、クライアントサイドおよびサーバサイドの両方において
ユーザ提供コード(UPC)の組み込みを実現する、洗練された視覚的編集ツールについて説明している。
2.本出願は、Wixコードのコンテキストで説明されている複数のコンセプトについて説明している。Wixコードは、Wix.Com Ltdが提供するWixウェブサイト構築システムの一部として開発されているサーバレスサイト開発プラットフォームである。以下の説明は、このようなシステムの包括的な説明を含む。Wixコードの実装は本コンセプトおよび技術の唯一の実施形態ではなく、本明細書の開示に従って追加の異なる実施形態を構築できることを明確にしておきたい。
1.本出願は、ウェブサイト構築システム(および他の視覚的編集システム)を対象とするものであり、検索エンジンによりインデックスされ得る、またSEOをサポートし得るウェブサイトを生成しながら、クライアントサイドおよびサーバサイドの両方において
ユーザ提供コード(UPC)の組み込みを実現する、洗練された視覚的編集ツールについて説明している。
2.本出願は、Wixコードのコンテキストで説明されている複数のコンセプトについて説明している。Wixコードは、Wix.Com Ltdが提供するWixウェブサイト構築システムの一部として開発されているサーバレスサイト開発プラットフォームである。以下の説明は、このようなシステムの包括的な説明を含む。Wixコードの実装は本コンセプトおよび技術の唯一の実施形態ではなく、本明細書の開示に従って追加の異なる実施形態を構築できることを明確にしておきたい。
関連出願
3.本出願は、付属書類A1に記載されている特許出願を参照しており(または関連しており)、そのすべてが本出願の譲受人と同一の譲受人に譲渡されている。付属書類A1に記載されている特許出願および特許のそれぞれの開示は、その全体が明示的に本明細書に組み込まれる。
3.本出願は、付属書類A1に記載されている特許出願を参照しており(または関連しており)、そのすべてが本出願の譲受人と同一の譲受人に譲渡されている。付属書類A1に記載されている特許出願および特許のそれぞれの開示は、その全体が明示的に本明細書に組み込まれる。
背景
4.出願人は、クラウドエコシステムの欠陥を見出した。laaS(サービスとしてのインフラストラクチャ)、PaaS(サービスとしてのプラットフォーム)、およびSaaS(サービスとしてのソフトウェア)の状況によって、VM、コンテナおよびネットワーキング、バックエンド開発者向けの様々な種類のプラットフォーム、モバイル開発者向けのバックエンド、ならびに個人および企業向けの既製のソフトウェアのための解決策が提供されている。その中で欠けているのは、ウェブサイトおよびウェブアプリのためのプラットフォームである。
5.サーバレス(サーバレスコンピューティングとも呼ばれる)の登場している中で、この欠陥にはまだプレーヤがいない。出願人は、この欠陥にある程度対処するために、ウェブサイトおよびウェブアプリの開発およびデプロイのためのプラットフォームであるWixコードを開発した。このプラットフォームは、フロントエンドに最適化されたJavaScript、SEO互換性、WYSIWYGサイトビルダー、ウェブメソッド、およびバックエンドJavaScriptなどの要素ならびに要求時コンテナブートを提供する。
6.特に、本開示のシステムは、フロントエンドおよびバックエンドの両方のコードに対してウェブサイトに組み込まれた埋め込みコードを指定しながら、ウェブサイトを視覚的に作成する機能を提供する。このすべては、検索エンジンによりインデックスされ、SEO技法を適用するウェブサイトの機能を維持しながら実行できる。
7.ウェブサイト構築システムは、スタンドアロンシステムとすることもできるし、より大きな編集システム内に組み込むこともできる。また、ウェブサイト構築システムは、オンライン(すなわち、アプリケーションが編集され、サーバに保存される)とすることも、オフラインとすることも、部分的にオンライン(ウェブサイトはローカルで編集されるが中央サーバにアップロードされる)とすることもできる。本開示のシステムは、通常、オンラインのウェブサイト構築システムの一部であり得るが、他の種類のウェブサイト構築システムに組み込むこともできる。
8.視覚的デザイン環境に基づいた既存のウェブサイト構築プラットフォームは、通常、MicrosoftのOfficeスイートを操作するために必要なスキルセットなどのスキルセットを有するユーザを対象としている。しかしながら、こうしたユーザが構築しているのはサイトの5%のみである。
9.本開示のシステムは、作成するのにより高いレベルのスキルを通常必要とするより複雑なサイトをサポートする。このようなサイトは、通常、設計者、スクリプトライター、および開発者によって作成され、インターネット内のサイトの95%を含む。付属書類A2は、この範囲のサイト作成者およびサイトタイプをさらに説明するプレゼンテーションを含む。
4.出願人は、クラウドエコシステムの欠陥を見出した。laaS(サービスとしてのインフラストラクチャ)、PaaS(サービスとしてのプラットフォーム)、およびSaaS(サービスとしてのソフトウェア)の状況によって、VM、コンテナおよびネットワーキング、バックエンド開発者向けの様々な種類のプラットフォーム、モバイル開発者向けのバックエンド、ならびに個人および企業向けの既製のソフトウェアのための解決策が提供されている。その中で欠けているのは、ウェブサイトおよびウェブアプリのためのプラットフォームである。
5.サーバレス(サーバレスコンピューティングとも呼ばれる)の登場している中で、この欠陥にはまだプレーヤがいない。出願人は、この欠陥にある程度対処するために、ウェブサイトおよびウェブアプリの開発およびデプロイのためのプラットフォームであるWixコードを開発した。このプラットフォームは、フロントエンドに最適化されたJavaScript、SEO互換性、WYSIWYGサイトビルダー、ウェブメソッド、およびバックエンドJavaScriptなどの要素ならびに要求時コンテナブートを提供する。
6.特に、本開示のシステムは、フロントエンドおよびバックエンドの両方のコードに対してウェブサイトに組み込まれた埋め込みコードを指定しながら、ウェブサイトを視覚的に作成する機能を提供する。このすべては、検索エンジンによりインデックスされ、SEO技法を適用するウェブサイトの機能を維持しながら実行できる。
7.ウェブサイト構築システムは、スタンドアロンシステムとすることもできるし、より大きな編集システム内に組み込むこともできる。また、ウェブサイト構築システムは、オンライン(すなわち、アプリケーションが編集され、サーバに保存される)とすることも、オフラインとすることも、部分的にオンライン(ウェブサイトはローカルで編集されるが中央サーバにアップロードされる)とすることもできる。本開示のシステムは、通常、オンラインのウェブサイト構築システムの一部であり得るが、他の種類のウェブサイト構築システムに組み込むこともできる。
8.視覚的デザイン環境に基づいた既存のウェブサイト構築プラットフォームは、通常、MicrosoftのOfficeスイートを操作するために必要なスキルセットなどのスキルセットを有するユーザを対象としている。しかしながら、こうしたユーザが構築しているのはサイトの5%のみである。
9.本開示のシステムは、作成するのにより高いレベルのスキルを通常必要とするより複雑なサイトをサポートする。このようなサイトは、通常、設計者、スクリプトライター、および開発者によって作成され、インターネット内のサイトの95%を含む。付属書類A2は、この範囲のサイト作成者およびサイトタイプをさらに説明するプレゼンテーションを含む。
システムの説明およびアーキテクチャ
10.付属書類A3は、例示的なシステムおよびその要素の詳細な内部技術説明を含む。
11.付属書類A4は、技術的なユーザ/開発者向けの例示的なシステムの内部技術説明を含む。
12.付属書類Bは、例示的なシステムの仕様とユーザ/開発者による使用法とを説明する、1セットのユーザ向けガイドおよびチュートリアルを含む。
13.付属書類Cは、例示的なシステムの全体的な紹介を提供する、1セットのプレゼンテーション、チュートリアル、およびビデオスクリプトを含む。
14.(基本的なWixシステムに加えて構築された)例示的なシステムの基本設計は、以下に説明する15のサブシステムから構成される。16番目の「サブシステム」は、サイト設計者から提供され、(適切なカプセル化および分離が適切に行われている)システムの一部として実行され得るユーザ提供コード(UPC)である。
15.これらの例示的なサブシステムは、クライアントサイドのプレゼンス、サーバサイドのプレゼンス、またはその両方を持つことができる。例示的なサブシステムは、中でも以下を含み得る。
16.これらの例示的なサブシステムおよびその例示的な機能は、次のように簡単に説明できる。
1
(サブシステム名)計算グリッド
(頭字語)CGD
(説明)
ドッカー(1)を実行するバックエンドサーバ:
・ドッカー内の部分を含まない。
・ドッカーのリサイクルおよびドッカーの高速起動を行う。
・エレメントリに特定のサービスを提供し得る。
(1)https://www.docker.com/what-docker
https://www.docker.com/what-container
2
(サブシステム名)エレメントリ
(頭字語)ELM
(説明)
各ドッカー内のアプリケーションサーバ:
・node.jsベース。
・クライアントサイドのスクリプトを準備するために使用。現在、これは計算グリッドの別のサービスとして外部に移動されている。
3
(サブシステム名)Wixデータ
(頭字語)WDT
(説明)
システムの基礎となるDBであり、以下を含む:
・クライアントおよびサーバAPIおよび実装。
・パーミッションシステム。
・フックシステム(カスタマイズ可能なコールバック)
・DBドライバ。基礎となるDB(以下のWix DBまたは代替的なDBなど)に接続する。
スキーマの使用について:
・単独で「ソフト」スキーマを使用。スキーマは上から提供される。
・スキーマは、APIにはなく、アプリケーションレベルにある。
・コンテンツマネージャは、スキーマとは異なるセルを有する場合がある。よって、「非準拠データを処理する」ユースケースを有する。
サンドボックスおよびライブの2つのDBインターフェースを提供する。単一のDBおよび2つ目のための差分で実装される。O(1)操作を保持する。以下のアルゴリズムに関するコメントを参照されたい。
4
(サブシステム名)ウェブメソッド/RPC
(頭字語)WBM
(説明)
クライアントからサーバへのRPC:
・Ajaxのための自動ラッパー
・セキュリティサービスを提供する。
・サーバからのエラーおよびログメッセージは自動的にクライアントに、すなわちブラウザコンソール(デバッグ用)に送信される。これによりデバッグ時に「単一システムイメージ」の感覚を提供する。
5
(サブシステム名)設定不要IDE
(頭字語)ZSI
(説明)
設定不要IDE:
・エディタに組み込まれたオンラインIDE
・コード補完をサポート
・メディアのための特定のサポート(画像/ビデオ/文書、URLなどのためのメディアマネージャを開く)
6
(サブシステム名)エディタプラットフォーム
(頭字語)EPT
(説明)
Wixサイトにアプリケーションを追加する新しい手法:
・ウェブワーカー(2)に基づく
・iframeにおけるウェブワーカー。アプリコードを実行する。
・コントローラ。Wixコンポーネントに接続する。
・APIへのインターフェースを含む。
・ルータ(インフラストラクチャ)を有する。コードバックエンド。ページのURLおよび選択を制御できる。
(2)https://en.wikipedia.org/wiki/Web_worker
7
(サブシステム名)クライアントサイドウェブワーカー
(頭字語)CSWW
(説明)
クライアントユーザコードを実行するクライアント上のウェブワーカー独立スレッド内のRTコードが:
・ウェブサイトを操作および修正するウェブワーカーiframeのコードを許可する一連のAPIから構成される。
・コンポーネントのデータの変更および可視性の変更に制限される場合がある。
・また、特定のアイテム(次のアイテム、アイテムX、...)を表示するためにギャラリーを変更するなど、一部のタイプのコンポーネントを制御できる。
・コンポーネントの追加/除去、コンポーネント属性の変更など、サイト自体の修正を含むように拡張できる。
8
(サブシステム名)ルータ
(頭字語)RTR
(説明)
ルータインフラストラクチャ。ユーザがルータコードを直接記述できる。
9
(サブシステム名)動的ページ
(頭字語)DYP
(説明)
独自のルータを持つアプリケーション。
ルータは、Wixデータのコレクションがあれば、アイテムおよびカテゴリページを作成し、データバインディングを介してデータを公開する。
これらは実際には、独自のURLで新しく作成されたページである。
これはすべてのルータの状況である。
他のページタイプにも拡張できる。
10
(サブシステム名)データバインディング
(頭字語)DBD
(説明)
独自のコントローラを定義するアプリケーション。そのコントローラが管理するのはデータセットであり、データベース内のデータをUIコンポーネントに接続する。
11
(サブシステム名)コンテンツマネージャ
(頭字語)CMGR
(説明)
WixデータのためのExcelのような編集ツール。
・ソフトスキーマをサポート。
・よって、システムは数値セル内に文字列値を持つことができる。セルは文字列表示機能を使用して表示されるが、赤い線でマークされます(スペルチェックと同様)。ホバー時に、文字列でポップアップを表示し、ユーザが修正できるようにする。
12
(サブシステム名)動的SEO
(頭字語)DSEO
(説明)
Wixコードのための完全なSEOソリューション。
・SEOを動的ページ、データバインディング、およびAPIに適用する。
・代わりに、サーバ環境で上記のワーカー(通常はクライアントで実行)を実行する。
・処理された検索エンジン対応ページを提供する。
13
(サブシステム名)計算関数
(頭字語)CFN
(説明)
関数をフロントエンドに直接公開するバックエンドの機能。関数を呼び出して応答を取得する。HTTP式バックエンド。
14
(サブシステム名)Wix DB/ドックストア
(頭字語)WDB
(説明)
システムの基礎となるスケールアウトMongo DB。データの外部管理シャーディング(3)をサポートする。
(3)https://en.wikipedia.org/wiki/Shard_(database_architechture)
15
(サブシステム名)$W API
(頭字語)$WAPI
(説明)
サイトのビジュアルに影響を与えるためにユーザが使用するAPI:
・コンポーネント属性、可視性などに影響を与えるDBDが使用するメインチャネル。
・jQueryに類似。
-
(サブシステム名)UPC
(頭字語)UPC
(説明)
ユーザ提供コード:
・これは、ウェブサイトの一部としてユーザにより記述または提供される実際のコードである。
・ウェブワーカー内で実行される。通常クライアントで実行されるが、SEOのためにサーバで実行されてもよい。
17.様々なサブシステム間の関係は、次のように視覚化され得る。
18.これらの例示的なサブシステムのそれぞれの詳細な説明は、付属書類A5に含まれる。
19.付属書類A6は、上記のWDTの一実施形態を実装するための特定の「データベースオーバーレイ」アルゴリズムを含む。代替的な実施形態は、「マイナスDB」を使用する代わりに、議論された「プラスDB」で「廃棄記録」(削除された記録を意味する)を使用し得る。
10.付属書類A3は、例示的なシステムおよびその要素の詳細な内部技術説明を含む。
11.付属書類A4は、技術的なユーザ/開発者向けの例示的なシステムの内部技術説明を含む。
12.付属書類Bは、例示的なシステムの仕様とユーザ/開発者による使用法とを説明する、1セットのユーザ向けガイドおよびチュートリアルを含む。
13.付属書類Cは、例示的なシステムの全体的な紹介を提供する、1セットのプレゼンテーション、チュートリアル、およびビデオスクリプトを含む。
14.(基本的なWixシステムに加えて構築された)例示的なシステムの基本設計は、以下に説明する15のサブシステムから構成される。16番目の「サブシステム」は、サイト設計者から提供され、(適切なカプセル化および分離が適切に行われている)システムの一部として実行され得るユーザ提供コード(UPC)である。
15.これらの例示的なサブシステムは、クライアントサイドのプレゼンス、サーバサイドのプレゼンス、またはその両方を持つことができる。例示的なサブシステムは、中でも以下を含み得る。
16.これらの例示的なサブシステムおよびその例示的な機能は、次のように簡単に説明できる。
1
(サブシステム名)計算グリッド
(頭字語)CGD
(説明)
ドッカー(1)を実行するバックエンドサーバ:
・ドッカー内の部分を含まない。
・ドッカーのリサイクルおよびドッカーの高速起動を行う。
・エレメントリに特定のサービスを提供し得る。
(1)https://www.docker.com/what-docker
https://www.docker.com/what-container
2
(サブシステム名)エレメントリ
(頭字語)ELM
(説明)
各ドッカー内のアプリケーションサーバ:
・node.jsベース。
・クライアントサイドのスクリプトを準備するために使用。現在、これは計算グリッドの別のサービスとして外部に移動されている。
3
(サブシステム名)Wixデータ
(頭字語)WDT
(説明)
システムの基礎となるDBであり、以下を含む:
・クライアントおよびサーバAPIおよび実装。
・パーミッションシステム。
・フックシステム(カスタマイズ可能なコールバック)
・DBドライバ。基礎となるDB(以下のWix DBまたは代替的なDBなど)に接続する。
スキーマの使用について:
・単独で「ソフト」スキーマを使用。スキーマは上から提供される。
・スキーマは、APIにはなく、アプリケーションレベルにある。
・コンテンツマネージャは、スキーマとは異なるセルを有する場合がある。よって、「非準拠データを処理する」ユースケースを有する。
サンドボックスおよびライブの2つのDBインターフェースを提供する。単一のDBおよび2つ目のための差分で実装される。O(1)操作を保持する。以下のアルゴリズムに関するコメントを参照されたい。
4
(サブシステム名)ウェブメソッド/RPC
(頭字語)WBM
(説明)
クライアントからサーバへのRPC:
・Ajaxのための自動ラッパー
・セキュリティサービスを提供する。
・サーバからのエラーおよびログメッセージは自動的にクライアントに、すなわちブラウザコンソール(デバッグ用)に送信される。これによりデバッグ時に「単一システムイメージ」の感覚を提供する。
5
(サブシステム名)設定不要IDE
(頭字語)ZSI
(説明)
設定不要IDE:
・エディタに組み込まれたオンラインIDE
・コード補完をサポート
・メディアのための特定のサポート(画像/ビデオ/文書、URLなどのためのメディアマネージャを開く)
6
(サブシステム名)エディタプラットフォーム
(頭字語)EPT
(説明)
Wixサイトにアプリケーションを追加する新しい手法:
・ウェブワーカー(2)に基づく
・iframeにおけるウェブワーカー。アプリコードを実行する。
・コントローラ。Wixコンポーネントに接続する。
・APIへのインターフェースを含む。
・ルータ(インフラストラクチャ)を有する。コードバックエンド。ページのURLおよび選択を制御できる。
(2)https://en.wikipedia.org/wiki/Web_worker
7
(サブシステム名)クライアントサイドウェブワーカー
(頭字語)CSWW
(説明)
クライアントユーザコードを実行するクライアント上のウェブワーカー独立スレッド内のRTコードが:
・ウェブサイトを操作および修正するウェブワーカーiframeのコードを許可する一連のAPIから構成される。
・コンポーネントのデータの変更および可視性の変更に制限される場合がある。
・また、特定のアイテム(次のアイテム、アイテムX、...)を表示するためにギャラリーを変更するなど、一部のタイプのコンポーネントを制御できる。
・コンポーネントの追加/除去、コンポーネント属性の変更など、サイト自体の修正を含むように拡張できる。
8
(サブシステム名)ルータ
(頭字語)RTR
(説明)
ルータインフラストラクチャ。ユーザがルータコードを直接記述できる。
9
(サブシステム名)動的ページ
(頭字語)DYP
(説明)
独自のルータを持つアプリケーション。
ルータは、Wixデータのコレクションがあれば、アイテムおよびカテゴリページを作成し、データバインディングを介してデータを公開する。
これらは実際には、独自のURLで新しく作成されたページである。
これはすべてのルータの状況である。
他のページタイプにも拡張できる。
10
(サブシステム名)データバインディング
(頭字語)DBD
(説明)
独自のコントローラを定義するアプリケーション。そのコントローラが管理するのはデータセットであり、データベース内のデータをUIコンポーネントに接続する。
11
(サブシステム名)コンテンツマネージャ
(頭字語)CMGR
(説明)
WixデータのためのExcelのような編集ツール。
・ソフトスキーマをサポート。
・よって、システムは数値セル内に文字列値を持つことができる。セルは文字列表示機能を使用して表示されるが、赤い線でマークされます(スペルチェックと同様)。ホバー時に、文字列でポップアップを表示し、ユーザが修正できるようにする。
12
(サブシステム名)動的SEO
(頭字語)DSEO
(説明)
Wixコードのための完全なSEOソリューション。
・SEOを動的ページ、データバインディング、およびAPIに適用する。
・代わりに、サーバ環境で上記のワーカー(通常はクライアントで実行)を実行する。
・処理された検索エンジン対応ページを提供する。
13
(サブシステム名)計算関数
(頭字語)CFN
(説明)
関数をフロントエンドに直接公開するバックエンドの機能。関数を呼び出して応答を取得する。HTTP式バックエンド。
14
(サブシステム名)Wix DB/ドックストア
(頭字語)WDB
(説明)
システムの基礎となるスケールアウトMongo DB。データの外部管理シャーディング(3)をサポートする。
(3)https://en.wikipedia.org/wiki/Shard_(database_architechture)
15
(サブシステム名)$W API
(頭字語)$WAPI
(説明)
サイトのビジュアルに影響を与えるためにユーザが使用するAPI:
・コンポーネント属性、可視性などに影響を与えるDBDが使用するメインチャネル。
・jQueryに類似。
-
(サブシステム名)UPC
(頭字語)UPC
(説明)
ユーザ提供コード:
・これは、ウェブサイトの一部としてユーザにより記述または提供される実際のコードである。
・ウェブワーカー内で実行される。通常クライアントで実行されるが、SEOのためにサーバで実行されてもよい。
17.様々なサブシステム間の関係は、次のように視覚化され得る。
18.これらの例示的なサブシステムのそれぞれの詳細な説明は、付属書類A5に含まれる。
19.付属書類A6は、上記のWDTの一実施形態を実装するための特定の「データベースオーバーレイ」アルゴリズムを含む。代替的な実施形態は、「マイナスDB」を使用する代わりに、議論された「プラスDB」で「廃棄記録」(削除された記録を意味する)を使用し得る。
コンセプト詳細
20.出願人は、本明細書でより詳細に説明されるいくつかの領域、機能、および能力を見出した。これらには次のものを含む。
20.1.オンラインウェブサイト構築環境でのカスタムバックエンド機能。
20.2.データベースで入力されるウェブページの動的プレビュー。
20.3.仮想ウェブページのプレビュー中におけるデータベースの編集
20.4.ウェブサイトホスティングのためのオンデマンドウェブサーバ実行インスタンス
20.5.ウェブサイトのライブ運用およびテストのための共通データベース。
20.6.自動レイアウト推奨エンジン(マジックレイアウト)。
20.7.SEOを改善するための自動ウェブサイト設計推奨。
20.8.分離されたユーザアップロードプラグインは、共同ホストされたウェブサイトにわたる感染を回避する。
20.9.ウェブサイトのためのユーザアップロードプラグインを分離する。
20.10.ユーザ提供プラグインがオンラインエディタの機能を拡張する。
20.11.設計ツールから分離したiFrameエディタインターフェース。
21.付属書類Dは、これらのコンセプトのそれぞれに関するさらなる詳細および開示を提供する。
以下は、いくつかのコンセプトに関する特定の追加の明確化である。
22.オンラインウェブサイト構築環境でのカスタムバックエンド機能。
22.1.システムは、生成されたページのHEADタグに含まれるスクリプトまたはマーカを介して、特定の検索エンジンスパイダーサポートを提供し得る。
22.2.このようなマーカまたはスクリプトは、スパイダーが特定の専用ウェブサービスを使用するように誘導し、ページをインデックス可能にするのに役立つ。
23.ウェブサイトホスティングのためのオンデマンドウェブサーバ実行インスタンス
23.1.本コンセプトは、特定のサイトのために構成されたウェブサーバインスタンスを実行し(特定のプラグインおよびこのサイトのサーバサイドのユーザ提供コードを含む)、かつタイムアウトなしで、またユーザが許容できる合計時間枠内でのHTTP要求への応答を十分な速さで行う、ドッカーコンテナの高速ブートを含む。
23.2.通常、仮想マシンの起動には数分かかる。ドッカーコンテナの起動には依然として2~3分かかる。これらの時間の両方とも許容可能ではない。
23.3.本開示のシステムでは、すべての関連するサイト固有ではないコードを含むが、ユーザ/サイト固有のコードを含まないスタンバイドッカー(例えば、コンテナ)のプールが提供される。
23.4.本システムは、特定のウェブサイトのサーバに接続する要求をライブポートでリッスンし得る。特定のウェブサイトに関連付けられているライブドッカーがある場合、本システムはそれに接続し得る。それ以外の場合は、プールからのスタンバイドッカーを使用し、要求されたコンテンツをプールに投入するか、そのようなコンテンツをロードするように指示することができる。
23.5.サイトが所与の期間(15分など)アクティブでない場合、システムはスタンバイコンテナをドロップし得る。
24.ウェブサイトのライブ運用およびテストのための共通データベース:
24.1.このコンセプトは、同じDB上でステージングおよびライブデータを実行することが含まれる。
24.2.上記のように、例示的なアルゴリズムが付属書類A6に詳述されている。
24.3.開発システムがDBに書き込むと、データのコピーが作成され得る。このコピーは、開発システムから見えるものであり得る。開発データはライブサイトでは表示されない場合がある。
25.ウェブサイトのためのユーザアップロードプラグインを分離する:
25.1.このコンセプトでは、iFrameを使用して1つのサイトからコンテンツを取得し、別のサイトに安全に組み込む方法について説明する。しかしながら、このようなコンテンツの組み込みは、次のようないくつかの方法を使用して実装され得る。
25.1.1.AJAXを介してコンテンツを転送すること。
25.1.2.静的コード分析の対象となるリモートコンテンツを直接含めること。例えば、JSコードを分析して安全かどうかを確認する。
25.2.本開示のシステムは、プラグインコードを実行するためにより小さい(かつ通常は非表示である)iframeを使用するが、プラグインUI自体はウェブサイト構築システムにネイティブであり得る。
これは、TPAのUIの一部または全部がiFrameに実装されているTPA(サードパーティアプリケーション)で使用される構成とは異なるが、TPAはTPAをホスト
するページ内の他のネイティブコンポーネントと依然として通信できる(TACA Wix特許出願で説明されているように。付属書類A1参照)。
25.3.プラグインはまた、プラグインがユーザ提供のコード(クライアントサイドでのみ実行される)のみを通常含むという点で、TPAとは異なる。一方、TPAコードはTPAプロバイダサーバで実行される。
25.4.よって、本開示のシステムは以下の利点を提供し得る。
25.4.1.プラグインをサイトにインストールできるようにし、これにより、機能が追加されるが、コードの分離に起因してウェブサイト自体が危険にさらされることはない。
25.4.2.プラグインはサイトのクッキーおよびDOMにアクセスできない。また、ウェブコンポーネント(4)または同様のシステムにより提供される(制限された)カプセル化のように、このセキュリティ対策をバイパスすることはできない。
(4)htts://www.webcomponents.org/
25.4.3.本開示のシステムにより、(例えば、プラグインを別々のiFrameに配置することなどにより)複数のプラグインをインストールできるため、互いに干渉することはない。
25.4.4.本開示のシステムにより、両方に単一のiFrameを使用したり、複数のiFrame間でAPIを使用したりして、別のプラグインを拡張するプラグインをインストールできる。このようなプラグインは、互いに分離またはサンドボックス化されておらず、例えば、同じベンダが提供するプラグインファミリの一部であり得る。
25.4.5.本開示のシステムは、サイト自体から切り離されたリッチAPIを備えた安全なプラグインサブ領域を提供することができ、同じ領域に複数のプラグインを配置できるようにし、上記の$w APIを介してリッチAPIをサポートする(場合により、TACA特許出願で説明されているように、制御されたクロスiFrame APIを使用する。付属書類A1参照)。
25.5.この構成は、iFrameには開発されたAPIがなく、ホスティングWBS(ウェブサイト構築システム)またはWBSページとやり取りしないために、通常のiFrameとは異なる。また、CSRF(クロスサイトリクエストフォージェリ)、クッキー窃取、XSS(クロスサイトスクリプティング)の防止にも効果的である。ただし、使用できるのはオンラインWBSのみである。
25.6.これは既存の従来技術のシステムとは対照的であり、従来のシステムは通常、正しく記述されたプラグインに依拠するか、特定のプラグインに制限されている。
25.7.本実装は、例えば、PostMsgのためのゲートウェイへのフックに依拠し、特定のメッセージをフィルタリングし得る。よって、本開示のシステムはまた、ユーザが任意のプラグインに付与されたアクセスパーミッションを正確に制御できるようにするユーザ指向のパーミッション技法も実装できる。これは、スマートフォンのオペレーティングシステムが、インストールされているアプリケーションに付与されるアクセスパーミッションを正確に制御する仕方に似ている(例えば、「アプリXYZはGPSを使用できますか?/連絡先にアクセスできますか?」)ただし、これはインストール前にプラグインのコピーをダウンロードする必要なく行われる。
25.8.本開示のシステムは、オンラインWBSとして、プラグインが更新されるとすぐにプラグインのすべてのインストールが更新され、プラグインを1か所に格納し得ることにさらに留意されたい。これは、各プラグインのインストールが別個であり、それ自体で更新する必要がある既存のオフラインの従来のシステムとは対照的である。
20.出願人は、本明細書でより詳細に説明されるいくつかの領域、機能、および能力を見出した。これらには次のものを含む。
20.1.オンラインウェブサイト構築環境でのカスタムバックエンド機能。
20.2.データベースで入力されるウェブページの動的プレビュー。
20.3.仮想ウェブページのプレビュー中におけるデータベースの編集
20.4.ウェブサイトホスティングのためのオンデマンドウェブサーバ実行インスタンス
20.5.ウェブサイトのライブ運用およびテストのための共通データベース。
20.6.自動レイアウト推奨エンジン(マジックレイアウト)。
20.7.SEOを改善するための自動ウェブサイト設計推奨。
20.8.分離されたユーザアップロードプラグインは、共同ホストされたウェブサイトにわたる感染を回避する。
20.9.ウェブサイトのためのユーザアップロードプラグインを分離する。
20.10.ユーザ提供プラグインがオンラインエディタの機能を拡張する。
20.11.設計ツールから分離したiFrameエディタインターフェース。
21.付属書類Dは、これらのコンセプトのそれぞれに関するさらなる詳細および開示を提供する。
以下は、いくつかのコンセプトに関する特定の追加の明確化である。
22.オンラインウェブサイト構築環境でのカスタムバックエンド機能。
22.1.システムは、生成されたページのHEADタグに含まれるスクリプトまたはマーカを介して、特定の検索エンジンスパイダーサポートを提供し得る。
22.2.このようなマーカまたはスクリプトは、スパイダーが特定の専用ウェブサービスを使用するように誘導し、ページをインデックス可能にするのに役立つ。
23.ウェブサイトホスティングのためのオンデマンドウェブサーバ実行インスタンス
23.1.本コンセプトは、特定のサイトのために構成されたウェブサーバインスタンスを実行し(特定のプラグインおよびこのサイトのサーバサイドのユーザ提供コードを含む)、かつタイムアウトなしで、またユーザが許容できる合計時間枠内でのHTTP要求への応答を十分な速さで行う、ドッカーコンテナの高速ブートを含む。
23.2.通常、仮想マシンの起動には数分かかる。ドッカーコンテナの起動には依然として2~3分かかる。これらの時間の両方とも許容可能ではない。
23.3.本開示のシステムでは、すべての関連するサイト固有ではないコードを含むが、ユーザ/サイト固有のコードを含まないスタンバイドッカー(例えば、コンテナ)のプールが提供される。
23.4.本システムは、特定のウェブサイトのサーバに接続する要求をライブポートでリッスンし得る。特定のウェブサイトに関連付けられているライブドッカーがある場合、本システムはそれに接続し得る。それ以外の場合は、プールからのスタンバイドッカーを使用し、要求されたコンテンツをプールに投入するか、そのようなコンテンツをロードするように指示することができる。
23.5.サイトが所与の期間(15分など)アクティブでない場合、システムはスタンバイコンテナをドロップし得る。
24.ウェブサイトのライブ運用およびテストのための共通データベース:
24.1.このコンセプトは、同じDB上でステージングおよびライブデータを実行することが含まれる。
24.2.上記のように、例示的なアルゴリズムが付属書類A6に詳述されている。
24.3.開発システムがDBに書き込むと、データのコピーが作成され得る。このコピーは、開発システムから見えるものであり得る。開発データはライブサイトでは表示されない場合がある。
25.ウェブサイトのためのユーザアップロードプラグインを分離する:
25.1.このコンセプトでは、iFrameを使用して1つのサイトからコンテンツを取得し、別のサイトに安全に組み込む方法について説明する。しかしながら、このようなコンテンツの組み込みは、次のようないくつかの方法を使用して実装され得る。
25.1.1.AJAXを介してコンテンツを転送すること。
25.1.2.静的コード分析の対象となるリモートコンテンツを直接含めること。例えば、JSコードを分析して安全かどうかを確認する。
25.2.本開示のシステムは、プラグインコードを実行するためにより小さい(かつ通常は非表示である)iframeを使用するが、プラグインUI自体はウェブサイト構築システムにネイティブであり得る。
これは、TPAのUIの一部または全部がiFrameに実装されているTPA(サードパーティアプリケーション)で使用される構成とは異なるが、TPAはTPAをホスト
するページ内の他のネイティブコンポーネントと依然として通信できる(TACA Wix特許出願で説明されているように。付属書類A1参照)。
25.3.プラグインはまた、プラグインがユーザ提供のコード(クライアントサイドでのみ実行される)のみを通常含むという点で、TPAとは異なる。一方、TPAコードはTPAプロバイダサーバで実行される。
25.4.よって、本開示のシステムは以下の利点を提供し得る。
25.4.1.プラグインをサイトにインストールできるようにし、これにより、機能が追加されるが、コードの分離に起因してウェブサイト自体が危険にさらされることはない。
25.4.2.プラグインはサイトのクッキーおよびDOMにアクセスできない。また、ウェブコンポーネント(4)または同様のシステムにより提供される(制限された)カプセル化のように、このセキュリティ対策をバイパスすることはできない。
(4)htts://www.webcomponents.org/
25.4.3.本開示のシステムにより、(例えば、プラグインを別々のiFrameに配置することなどにより)複数のプラグインをインストールできるため、互いに干渉することはない。
25.4.4.本開示のシステムにより、両方に単一のiFrameを使用したり、複数のiFrame間でAPIを使用したりして、別のプラグインを拡張するプラグインをインストールできる。このようなプラグインは、互いに分離またはサンドボックス化されておらず、例えば、同じベンダが提供するプラグインファミリの一部であり得る。
25.4.5.本開示のシステムは、サイト自体から切り離されたリッチAPIを備えた安全なプラグインサブ領域を提供することができ、同じ領域に複数のプラグインを配置できるようにし、上記の$w APIを介してリッチAPIをサポートする(場合により、TACA特許出願で説明されているように、制御されたクロスiFrame APIを使用する。付属書類A1参照)。
25.5.この構成は、iFrameには開発されたAPIがなく、ホスティングWBS(ウェブサイト構築システム)またはWBSページとやり取りしないために、通常のiFrameとは異なる。また、CSRF(クロスサイトリクエストフォージェリ)、クッキー窃取、XSS(クロスサイトスクリプティング)の防止にも効果的である。ただし、使用できるのはオンラインWBSのみである。
25.6.これは既存の従来技術のシステムとは対照的であり、従来のシステムは通常、正しく記述されたプラグインに依拠するか、特定のプラグインに制限されている。
25.7.本実装は、例えば、PostMsgのためのゲートウェイへのフックに依拠し、特定のメッセージをフィルタリングし得る。よって、本開示のシステムはまた、ユーザが任意のプラグインに付与されたアクセスパーミッションを正確に制御できるようにするユーザ指向のパーミッション技法も実装できる。これは、スマートフォンのオペレーティングシステムが、インストールされているアプリケーションに付与されるアクセスパーミッションを正確に制御する仕方に似ている(例えば、「アプリXYZはGPSを使用できますか?/連絡先にアクセスできますか?」)ただし、これはインストール前にプラグインのコピーをダウンロードする必要なく行われる。
25.8.本開示のシステムは、オンラインWBSとして、プラグインが更新されるとすぐにプラグインのすべてのインストールが更新され、プラグインを1か所に格納し得ることにさらに留意されたい。これは、各プラグインのインストールが別個であり、それ自体で更新する必要がある既存のオフラインの従来のシステムとは対照的である。
01-CGD
計算グリッド
Wixコードの計算グリッド
目的および機能
グリッドにはWixコードの2つの主要な機能がある。
・フロントエンドおよびバックエンドのコードを開発する場合、エディタモードであり、エディタモードは、安全なマルチテナント方式でのプレビューのためにフロントエンドコードのバンドルとバックエンドコードの実行を提供しながら、ソースコードの基礎となるファイルシステムを提供する。
・パブリック表示では、パブリックモードのユーザバックエンドコードのための高速で安全なマルチテナント方式の信頼できるエグゼキュータ。
計算グリッド
Wixコードの計算グリッド
目的および機能
グリッドにはWixコードの2つの主要な機能がある。
・フロントエンドおよびバックエンドのコードを開発する場合、エディタモードであり、エディタモードは、安全なマルチテナント方式でのプレビューのためにフロントエンドコードのバンドルとバックエンドコードの実行を提供しながら、ソースコードの基礎となるファイルシステムを提供する。
・パブリック表示では、パブリックモードのユーザバックエンドコードのための高速で安全なマルチテナント方式の信頼できるエグゼキュータ。
クラウドランタイム(旧エレメントリ)
目的
・クラウドランタイムの実行は、コンピューティンググリッドの存在の唯一の目的である。
・クラウドランタイムコンテナは、信頼性、高速性、および安全性を備えるように設計されている。
目的
・クラウドランタイムの実行は、コンピューティンググリッドの存在の唯一の目的である。
・クラウドランタイムコンテナは、信頼性、高速性、および安全性を備えるように設計されている。
高速性
・クラウドランタイムコンテナは、単一ノードJSプロセスを実行する軽量コンテナである。
・コンテナがユーザコードを提供する準備が整うのに比較的長い時間がかかるため、そのためのスタンバイコンテナのプールを維持する。
・オンデマンド機能を提供するために常に十分なスタンバイコンテナがあることを確認することは、クラウドライフサイクルの役割である(以下を参照)。
・クラウドランタイムコンテナは、単一ノードJSプロセスを実行する軽量コンテナである。
・コンテナがユーザコードを提供する準備が整うのに比較的長い時間がかかるため、そのためのスタンバイコンテナのプールを維持する。
・オンデマンド機能を提供するために常に十分なスタンバイコンテナがあることを確認することは、クラウドライフサイクルの役割である(以下を参照)。
信頼性
・パブリック(編集しない)モードでは、
○コンテナは完全に廃棄可能である。
○システムは、ユーザコードが実行されているコンテナを100ミリ秒未満でプロビジョンできる。
・編集モードでは、
○ユーザコードは、定期的に自動的にアーカイブされる。
○コードの編集はクラウドランタイムコンテナが実行されているのと同じファイルシ
ステムで行われるため、ユーザはコードをすぐに実行してプレビューできる。
・パブリック(編集しない)モードでは、
○コンテナは完全に廃棄可能である。
○システムは、ユーザコードが実行されているコンテナを100ミリ秒未満でプロビジョンできる。
・編集モードでは、
○ユーザコードは、定期的に自動的にアーカイブされる。
○コードの編集はクラウドランタイムコンテナが実行されているのと同じファイルシ
ステムで行われるため、ユーザはコードをすぐに実行してプレビューできる。
安全性
・クラウドランタイムコンテナは1つのアプリケーションのみを実行するため、コンテンツリークは発生しない。
・コンテナは、静的にリンクされたノードJSバイナリのみを含む。
・コンテナのルートファイルシステムは読み取り専用である。
・各コンテナは一意のユーザIDで実行される。
・ユーザコードはホストワーカーによってコンテナの外部から投入される。
・コンテナはコードにアクセスできないが、コードが割り当てられているユーザはアクセスできる。
・ユーザコードファイルシステムは実行パーミッションを持たない。
・ディスククオータ、メモリ、CPU、ネットワーク、および他のシステムリソースクオータ制限がコンテナに適用される。
・クラウドランタイムコンテナは1つのアプリケーションのみを実行するため、コンテンツリークは発生しない。
・コンテナは、静的にリンクされたノードJSバイナリのみを含む。
・コンテナのルートファイルシステムは読み取り専用である。
・各コンテナは一意のユーザIDで実行される。
・ユーザコードはホストワーカーによってコンテナの外部から投入される。
・コンテナはコードにアクセスできないが、コードが割り当てられているユーザはアクセスできる。
・ユーザコードファイルシステムは実行パーミッションを持たない。
・ディスククオータ、メモリ、CPU、ネットワーク、および他のシステムリソースクオータ制限がコンテナに適用される。
クラウドライフサイクル
・クラウドライフサイクルはグリッドホストの外部であるが、このコンテキストで言及するに値する。その機能は、Wixコードの計算グリッドを制御および管理することである。
・ライフサイクルは、グリッドホスト上の2つのコンポーネントを使用して、ホストおよびクラウドランタイムコンテナを管理する。
a.ドッカーデーモン。ホストワーカーおよびクラウドランタイムコンテナを開始、停止、および制御する。
b.ホストワーカー。クラウドランタイムコンテナファイルシステムのパーミッション、クオータ、およびアーカイブ機能を管理する。
・このドキュメントに関連するのは、クラウドランタイムが使用している各ユーザコードごとにUNIX(登録商標) UIDを割り当てるライフサイクル機能である。
・クラウドライフサイクルはグリッドホストの外部であるが、このコンテキストで言及するに値する。その機能は、Wixコードの計算グリッドを制御および管理することである。
・ライフサイクルは、グリッドホスト上の2つのコンポーネントを使用して、ホストおよびクラウドランタイムコンテナを管理する。
a.ドッカーデーモン。ホストワーカーおよびクラウドランタイムコンテナを開始、停止、および制御する。
b.ホストワーカー。クラウドランタイムコンテナファイルシステムのパーミッション、クオータ、およびアーカイブ機能を管理する。
・このドキュメントに関連するのは、クラウドランタイムが使用している各ユーザコードごとにUNIX(登録商標) UIDを割り当てるライフサイクル機能である。
グリッドホスト
計算グリッドは、Wixコードライフサイクルサービスによって管理される3つの主要コンポーネントで構築される。グリッド上の各ホストは、次のコンポーネントを有する。
1.ドッカーデーモン
2.(ドッカーコンテナ内の)ホストワーカー
3.(ドッカーコンテナ内の)クラウドランタイム(旧エレメントリ)
・グリッドホストが稼働を開始すると、グリッドホストIPを、その定義されたリソース、すなわちCPUおよびメモリと共にメッセージコンテナに送信することにより、自身をライフサイクルに登録する。
・グリッドホストには、クラウドライフサイクルを管理するために、動作中のドッカーデーモンがインストールされ、実行されている必要がある。
計算グリッドは、Wixコードライフサイクルサービスによって管理される3つの主要コンポーネントで構築される。グリッド上の各ホストは、次のコンポーネントを有する。
1.ドッカーデーモン
2.(ドッカーコンテナ内の)ホストワーカー
3.(ドッカーコンテナ内の)クラウドランタイム(旧エレメントリ)
・グリッドホストが稼働を開始すると、グリッドホストIPを、その定義されたリソース、すなわちCPUおよびメモリと共にメッセージコンテナに送信することにより、自身をライフサイクルに登録する。
・グリッドホストには、クラウドライフサイクルを管理するために、動作中のドッカーデーモンがインストールされ、実行されている必要がある。
ホストワーカー
ホストワーカーは、クラウドライフサイクルがホストを管理するために使用するコンポーネントの一部である。これには2つの役割がある。
1.ライフサイクル機能を拡張して、システムのパーミッション、クオータ、ネットワーク、ファイルシステム、およびコードアーカイブを管理および操作する。
2.ユーザがWixエディタでコードを編集する際に、エディタにAPIのようなファイルシステムを提供する。
ホストワーカーは、クラウドライフサイクルがホストを管理するために使用するコンポーネントの一部である。これには2つの役割がある。
1.ライフサイクル機能を拡張して、システムのパーミッション、クオータ、ネットワーク、ファイルシステム、およびコードアーカイブを管理および操作する。
2.ユーザがWixエディタでコードを編集する際に、エディタにAPIのようなファイルシステムを提供する。
ホストワーカーライフサイクル
1.クラウドランタイムコンテナ作成前
a.ユーザコードのためのディレクトリを作成する。
b.適切なパーミッションおよびディスククオータを設定する。
2.クラウドランタイムコンテナが「ウォーム」で作動した後
a.コンテナにネットワークトラフィックの実施を設定する
b.ユーザがコードを編集している間に、ユーザコードを定期的に自動アーカイブする。
3.クラウドライフサイクルがコンテナの停止を決定した場合に、
a.ユーザコードを保存してデータベースにアップロードする(エディタモードで)。
4.ライフサイクルによりスケジュールされた定期的なタスクを実行する。
a.「感染した」コンテナを見つけ、キルする。
b.コードがアーカイブされた後、ディスクをクリーンアップする。
1.クラウドランタイムコンテナ作成前
a.ユーザコードのためのディレクトリを作成する。
b.適切なパーミッションおよびディスククオータを設定する。
2.クラウドランタイムコンテナが「ウォーム」で作動した後
a.コンテナにネットワークトラフィックの実施を設定する
b.ユーザがコードを編集している間に、ユーザコードを定期的に自動アーカイブする。
3.クラウドライフサイクルがコンテナの停止を決定した場合に、
a.ユーザコードを保存してデータベースにアップロードする(エディタモードで)。
4.ライフサイクルによりスケジュールされた定期的なタスクを実行する。
a.「感染した」コンテナを見つけ、キルする。
b.コードがアーカイブされた後、ディスクをクリーンアップする。
ホストワーカーファイルシステムAPI
上述のように、ホストワーカーの他の役割は、エディタに仮想ファイルシステム(VFS)APIを提供することである。その意味でのホストワーカーの役割は次のとおりである。
1.次のような基本的なファイルシステム操作を提供する。
a.ファイルおよびディレクトリの作成、更新、読み取り、削除操作。
2.上記の操作が、クオータおよびパーミッションの制限を維持しながら許可されたユーザに代わってのみ行われることを確認する。
上述のように、ホストワーカーの他の役割は、エディタに仮想ファイルシステム(VFS)APIを提供することである。その意味でのホストワーカーの役割は次のとおりである。
1.次のような基本的なファイルシステム操作を提供する。
a.ファイルおよびディレクトリの作成、更新、読み取り、削除操作。
2.上記の操作が、クオータおよびパーミッションの制限を維持しながら許可されたユーザに代わってのみ行われることを確認する。
02-ELM
エレメントリ
Wixコード-クラウドランタイム/エレメントリ
概要
クラウドランタイム(別名エレメントリ)は、プレビューおよび表示のモードの両方の編集のためのユーザ要求を処理するnode.jsベースのサービスである。サービスは、複数のシナリオでユーザコードを実行し、ユーザクライアントコードを処理およびトランスパイルする役割を果たす。
エレメントリ
Wixコード-クラウドランタイム/エレメントリ
概要
クラウドランタイム(別名エレメントリ)は、プレビューおよび表示のモードの両方の編集のためのユーザ要求を処理するnode.jsベースのサービスである。サービスは、複数のシナリオでユーザコードを実行し、ユーザクライアントコードを処理およびトランスパイルする役割を果たす。
メインエンドポイント
・ウェブメソッド。サブプロジェクト#4ドキュメントで指定されている。
・動的ルータ。サブプロジェクト#8ドキュメントで指定されている。
・Wixデータ。サブプロジェクト#3ドキュメントで指定されている。
・Wixエンドポイント(計算関数)。サブプロジェクト#13ドキュメントで指定されている。
・静的ファイル。ユーザコードをトランスパイル、バンドル、および処理する。
・ウェブメソッド。サブプロジェクト#4ドキュメントで指定されている。
・動的ルータ。サブプロジェクト#8ドキュメントで指定されている。
・Wixデータ。サブプロジェクト#3ドキュメントで指定されている。
・Wixエンドポイント(計算関数)。サブプロジェクト#13ドキュメントで指定されている。
・静的ファイル。ユーザコードをトランスパイル、バンドル、および処理する。
内部/外部モジュール分離
サービスは内部モジュールと外部モジュールとに分離され、ユーザコードは外部モジュールにマウントされ、ユーザはそこからwixライブラリ(wix-data、wix-routers、wix-endpoints、wix-fetch)にアクセスできる。
ユーザが外部モジュールのみにアクセスするように制限するために、サービスはスコープ指定を要するモジュール(wixが開発したオープンソースプロジェクト)を使用する。
サービスは内部モジュールと外部モジュールとに分離され、ユーザコードは外部モジュールにマウントされ、ユーザはそこからwixライブラリ(wix-data、wix-routers、wix-endpoints、wix-fetch)にアクセスできる。
ユーザが外部モジュールのみにアクセスするように制限するために、サービスはスコープ指定を要するモジュール(wixが開発したオープンソースプロジェクト)を使用する。
ユーザコードのトランスパイル
Wixコードにより、ユーザは最新のECMAScript(現時点ではES2017
まで)機能を使用してコードを記述でき、クラウドランタイムの役割のうちの1つは、ランタイム環境によってこのコードをJavaScriptのサポートバージョンにトランスパイルすることである。
・クライアントサイドコード。クラウドランタイムには.jsファイルおよび.mapファイルを要求するためのエンドポイントがあり、サービスはクライアントサイドコードをトランスパイルおよびバンドルするために同じコアライブラリをクラウドバンドラサーバと共有している。
・バックエンドコード。ECNAScriptの最新機能はnode(v6.11.0)の現在のLTSバージョンではサポートされておらず、サービスは必要なファイルのトランスパイルを遅延評価するためにバベルレジスタを使用する。
Wixコードにより、ユーザは最新のECMAScript(現時点ではES2017
まで)機能を使用してコードを記述でき、クラウドランタイムの役割のうちの1つは、ランタイム環境によってこのコードをJavaScriptのサポートバージョンにトランスパイルすることである。
・クライアントサイドコード。クラウドランタイムには.jsファイルおよび.mapファイルを要求するためのエンドポイントがあり、サービスはクライアントサイドコードをトランスパイルおよびバンドルするために同じコアライブラリをクラウドバンドラサーバと共有している。
・バックエンドコード。ECNAScriptの最新機能はnode(v6.11.0)の現在のLTSバージョンではサポートされておらず、サービスは必要なファイルのトランスパイルを遅延評価するためにバベルレジスタを使用する。
ユーザコードの実行
ユーザは、ウェブメソッド、wix-dataフック、カスタムルータ、データバインディングルータフック、および計算関数を使用して、最終的にクラウドランタイムサービスで実行する必要があるバックエンドコードを作成できる。
クラウドランタイムは、ユーザコードをコンテキストでラップするためにノードドメインを使用し、これによりユーザコードのスタックトレースおよびログをキャプチャできる。
ユーザは、ウェブメソッド、wix-dataフック、カスタムルータ、データバインディングルータフック、および計算関数を使用して、最終的にクラウドランタイムサービスで実行する必要があるバックエンドコードを作成できる。
クラウドランタイムは、ユーザコードをコンテキストでラップするためにノードドメインを使用し、これによりユーザコードのスタックトレースおよびログをキャプチャできる。
03-WDT
Wixデータ
Wixデータ
WixデータAPI
WixデータAPI。データベースへのアクセスに使用される。WixデータAPIは、クライアントサイドのブラウザコード(CSWWを参照)とユーザバックエンドコード(ELMを参照)との両方で使用される。ルータのドキュメントはこちらで参照できる。
WixデータAPIモジュールはまた、データ変換およびエラー処理も実行する。
WixデータAPIは、ウェブメソッドプロトコル(WBMを参照)を使用してWixデータプロバイダと通信する。
Wixデータ
Wixデータ
WixデータAPI
WixデータAPI。データベースへのアクセスに使用される。WixデータAPIは、クライアントサイドのブラウザコード(CSWWを参照)とユーザバックエンドコード(ELMを参照)との両方で使用される。ルータのドキュメントはこちらで参照できる。
WixデータAPIモジュールはまた、データ変換およびエラー処理も実行する。
WixデータAPIは、ウェブメソッドプロトコル(WBMを参照)を使用してWixデータプロバイダと通信する。
Wixデータプロバイダ
Wixデータプロバイダ。APIの実装である。ユーザが自分のバックエンドコードを持たない場合、実装はクラウドマルチテナントサーバでAPI要求を実行して処理するか、ユーザドッカーコンテナで実行される(ELWを参照)。Wixデータプロバイダは、必要なWixデータロジックを実行する。
・認証を処理する。パーミッションの構成は、各ロール(サイト所有者、データ所有者、誰でも)が持つパーミッション(読み取り、挿入、更新、削除)を定義します。
・フックを処理する。フックにより、ユーザコードはAPIを介して実行されるWixデータ要求をインターセプトおよび修正できる(こちらの文書を参照)。
・必要なクエリおよびデータ変換を実行して、高度なWixデータ機能をサポートする。
○削除されたフィールドを結果から非表示にし、フィルタリングする。
○結果として得られるオブジェクトを計算フィールドで強化する(計算フィールドはスキーマで定義された特別なフィールドであり、既存のフィールドデータに基づいて新しいフィールドを生成できる)。
○参照されたコレクションアイテムを結合する。
○保存されるドキュメントを所有者識別で強化する。
Wixデータプロバイダは、VFSに格納されたスキーマおよびパーミッションを認識している。
Wixデータプロバイダ。APIの実装である。ユーザが自分のバックエンドコードを持たない場合、実装はクラウドマルチテナントサーバでAPI要求を実行して処理するか、ユーザドッカーコンテナで実行される(ELWを参照)。Wixデータプロバイダは、必要なWixデータロジックを実行する。
・認証を処理する。パーミッションの構成は、各ロール(サイト所有者、データ所有者、誰でも)が持つパーミッション(読み取り、挿入、更新、削除)を定義します。
・フックを処理する。フックにより、ユーザコードはAPIを介して実行されるWixデータ要求をインターセプトおよび修正できる(こちらの文書を参照)。
・必要なクエリおよびデータ変換を実行して、高度なWixデータ機能をサポートする。
○削除されたフィールドを結果から非表示にし、フィルタリングする。
○結果として得られるオブジェクトを計算フィールドで強化する(計算フィールドはスキーマで定義された特別なフィールドであり、既存のフィールドデータに基づいて新しいフィールドを生成できる)。
○参照されたコレクションアイテムを結合する。
○保存されるドキュメントを所有者識別で強化する。
Wixデータプロバイダは、VFSに格納されたスキーマおよびパーミッションを認識している。
ドックストア
ドックストア。MongoDBとWixデータプロバイダとの間のブリッジとして機能するサービス。
・WixデータからMongo形式へのクエリ変換を実行する。
・データベースのコピー機能およびデータ同期機能を含む(これによりサンドボックスからライブおよびテンプレートからユーザサイトにデータを同期できる)。
・IDを生成し、ドキュメントの作成時間および更新時間を格納することにより、データの強化を実行する。
ドックストア。MongoDBとWixデータプロバイダとの間のブリッジとして機能するサービス。
・WixデータからMongo形式へのクエリ変換を実行する。
・データベースのコピー機能およびデータ同期機能を含む(これによりサンドボックスからライブおよびテンプレートからユーザサイトにデータを同期できる)。
・IDを生成し、ドキュメントの作成時間および更新時間を格納することにより、データの強化を実行する。
ユーザライブラリ
出願人らの知る限り、どのプロジェクトでも(コピーのように)オープンソースコードを直接使用することはない。
WixデータAPIおよびWixデータプロバイダで使用されるオープンソースライブラリは次のとおりである。
出願人らの知る限り、どのプロジェクトでも(コピーのように)オープンソースコードを直接使用することはない。
WixデータAPIおよびWixデータプロバイダで使用されるオープンソースライブラリは次のとおりである。
04-WBM
ウェブメソッド/RPC
WBMウェブメソッド/RPC
ウェブメソッドは、ネットワークを介して呼び出され得る、ECMAScriptモジュールからエクスポートされた関数である(このようなモジュールはウェブモジュールと呼ばれる)。これは、エンドユーザのブラウザ内のCSWWで実行されるコードがELMで実行されるコードとシームレスにやり取りできるようにするメカニズムである。このメカニズムは、どのロールがどのウェブメソッドを呼び出すことを許可されているかの認証を処理し、要求スコープ指定情報をウェブメソッドに投入し、エラーを伝播し、ブラウザコンソールに記録されるCSWWに記録する。加えて、同じECMAScriptモジュールインポート構文を使用して、CSWWおよびELMの両方のユーザコードから同じコードを呼び出すことができる。この手法により、アプリケーションをデバッグおよび開発する際の「単一イメージシステム」の感覚が得られる。
ウェブメソッドのサーバ部分はELM内で実行され、RTRフックおよびカスタムルータ、WDTフック、CFNなど、ELMで実行されるユーザコードからプロミスを返す通常の関数として自由に呼び出すことができる。WBMはまた、WDTのためのRPCメカニズムとしても使用されて、バックエンドコードおよびページコードで同じように使用できるようにする。プロミスを返す通常の関数としてウェブメソッドを呼び出すためのJavaScriptプロキシは、ユーザコードにバンドルされ、CSWW内で実行される。
このメカニズムは、次のコンポーネントによって実装される。
・ウェブメソッドドメイン。要求スコープ指定情報をnode.jsドメインにアタッチし、これは、後でウェブモジュールエクステンションによって生成された関数によって取得され、加えてnode.jsのデフォルトのロギング関数をオーバーライドして、このドメインにログを収集する。
・ウェブモジュールエクステンション。バベルレジスタを使用して、グローバル要求関数の動作をオーバーライドして、ECMScript 2015コードをELMで使用されるノードのターゲットバージョンに変換し、ユーザウェブモジュールからエクスポートされた関数をラップするために要求メカニズムにフックする。
・ウェブメソッドエクスプレスルータ。エレメントリサポートから到来する要求のためのELMへのエントリポイントである。CSWWからのウェブメソッド呼び出しの認証を
処理する。また、ウェブメソッドの実行が終了すると、ウェブメソッドの実行中に収集されたログを転送する。
・エレメントリサポート。ワイヤプロトコルを介したウェブメソッドのクライアントサイドを提供する。CSWWで実行され、ウェブメソッドプロキシによって呼び出される。また、エレメントリから受信したログもユーザのブラウザコンソールに出力する。
・ウェブメソッドプロキシは、ウェブモジュールの静的分析を実行して、エクスポートされる関数を決定することにより生成される。これらは、CSWW内で実行するためのユーザコードにバンドルされる。
ウェブメソッドのロードおよび実行は、babel-preset-es2015-node6と共にバベルレジスタを使用して実装される。スコープ指定要求は、ユーザコードからインポートされ得るモジュールのファイルシステムの場所を変更するために使用される。ウェブメソッドプロキシは、Acornパーサを使用して静的分析を実行し、生成されたプロキシをBrowserifyを使用してユーザページコードとバンドルすることで生成される。エレメントリサポートおよびウェブメソッドエクスプレスルータにより使用されるオーバーザワイヤプロトコルは、ネイティブJavaScript Datesを処理するための拡張機能を備えたJSONに基づいている。
ウェブメソッド/RPC
WBMウェブメソッド/RPC
ウェブメソッドは、ネットワークを介して呼び出され得る、ECMAScriptモジュールからエクスポートされた関数である(このようなモジュールはウェブモジュールと呼ばれる)。これは、エンドユーザのブラウザ内のCSWWで実行されるコードがELMで実行されるコードとシームレスにやり取りできるようにするメカニズムである。このメカニズムは、どのロールがどのウェブメソッドを呼び出すことを許可されているかの認証を処理し、要求スコープ指定情報をウェブメソッドに投入し、エラーを伝播し、ブラウザコンソールに記録されるCSWWに記録する。加えて、同じECMAScriptモジュールインポート構文を使用して、CSWWおよびELMの両方のユーザコードから同じコードを呼び出すことができる。この手法により、アプリケーションをデバッグおよび開発する際の「単一イメージシステム」の感覚が得られる。
ウェブメソッドのサーバ部分はELM内で実行され、RTRフックおよびカスタムルータ、WDTフック、CFNなど、ELMで実行されるユーザコードからプロミスを返す通常の関数として自由に呼び出すことができる。WBMはまた、WDTのためのRPCメカニズムとしても使用されて、バックエンドコードおよびページコードで同じように使用できるようにする。プロミスを返す通常の関数としてウェブメソッドを呼び出すためのJavaScriptプロキシは、ユーザコードにバンドルされ、CSWW内で実行される。
このメカニズムは、次のコンポーネントによって実装される。
・ウェブメソッドドメイン。要求スコープ指定情報をnode.jsドメインにアタッチし、これは、後でウェブモジュールエクステンションによって生成された関数によって取得され、加えてnode.jsのデフォルトのロギング関数をオーバーライドして、このドメインにログを収集する。
・ウェブモジュールエクステンション。バベルレジスタを使用して、グローバル要求関数の動作をオーバーライドして、ECMScript 2015コードをELMで使用されるノードのターゲットバージョンに変換し、ユーザウェブモジュールからエクスポートされた関数をラップするために要求メカニズムにフックする。
・ウェブメソッドエクスプレスルータ。エレメントリサポートから到来する要求のためのELMへのエントリポイントである。CSWWからのウェブメソッド呼び出しの認証を
処理する。また、ウェブメソッドの実行が終了すると、ウェブメソッドの実行中に収集されたログを転送する。
・エレメントリサポート。ワイヤプロトコルを介したウェブメソッドのクライアントサイドを提供する。CSWWで実行され、ウェブメソッドプロキシによって呼び出される。また、エレメントリから受信したログもユーザのブラウザコンソールに出力する。
・ウェブメソッドプロキシは、ウェブモジュールの静的分析を実行して、エクスポートされる関数を決定することにより生成される。これらは、CSWW内で実行するためのユーザコードにバンドルされる。
ウェブメソッドのロードおよび実行は、babel-preset-es2015-node6と共にバベルレジスタを使用して実装される。スコープ指定要求は、ユーザコードからインポートされ得るモジュールのファイルシステムの場所を変更するために使用される。ウェブメソッドプロキシは、Acornパーサを使用して静的分析を実行し、生成されたプロキシをBrowserifyを使用してユーザページコードとバンドルすることで生成される。エレメントリサポートおよびウェブメソッドエクスプレスルータにより使用されるオーバーザワイヤプロトコルは、ネイティブJavaScript Datesを処理するための拡張機能を備えたJSONに基づいている。
05-ZSI
設定不要IDE
IDE
IDEコンポーネントは、Wixエディタに組み込まれたオンラインコードエディタである。
既存のサイトページのコードを編集したり、Wixコードファイルシステムに存在するファイル(パブリックおよびバックエンドファイル)を編集したりするために使用できる。
IDEはまた、リッチなコンテキストコード補完、Wixメディアマネージャの組み込み、コードの書式設定、カスタム警告およびエラーも提供する。
これらのカスタム機能はすべて、Orionと呼ばれる既存のオープンソースIDEの上に構築されている。
設定不要IDE
IDE
IDEコンポーネントは、Wixエディタに組み込まれたオンラインコードエディタである。
既存のサイトページのコードを編集したり、Wixコードファイルシステムに存在するファイル(パブリックおよびバックエンドファイル)を編集したりするために使用できる。
IDEはまた、リッチなコンテキストコード補完、Wixメディアマネージャの組み込み、コードの書式設定、カスタム警告およびエラーも提供する。
これらのカスタム機能はすべて、Orionと呼ばれる既存のオープンソースIDEの上に構築されている。
コード補完
IDEは、標準のJavaScript環境およびWixコードAPIの両方に対して、リッチなコード補完をユーザに提供する。
コード補完は、以下の補完を提案できる。
1.WixコードコンポーネントAPI($w)。現在のページに存在する要素に応じて提案、例えば「$w(’#button1’)」を提示する。つまり、ユーザには、現在のページに存在する要素についてのみ提案が表示され、他のページの要素については表示されない。これらの提案は、通常のパブリック/バックエンドファイルには表示されず、ページコードを編集する場合にのみ表示される。
2.「wix-data」、「wix-window」など、コードのコンテキストに依存しないWixコードの一般的なAPI。つまり、ページのコードを編集するとき、または通常のパブリック/バックエンドファイルにおいて利用可能である。
3.JSオブジェクトおよび関数、例えば「console.log()」もまた、すべてのファイルタイプで利用可能である。
4.テンプレート。モジュールのインポート(例えば、「’wix-location’から場所をインポートする」)と、forループなどのJS共通テンプレートと、の両方のテンプレート提案を提供する。
5.関数パラメータ。関数のパラメータおよび名前を提示する。
コード補完ウィジェットはまた、選択されたすべての提案の簡単な説明を完全なドキュメントへのリンクと共に提供する。
IDEは、標準のJavaScript環境およびWixコードAPIの両方に対して、リッチなコード補完をユーザに提供する。
コード補完は、以下の補完を提案できる。
1.WixコードコンポーネントAPI($w)。現在のページに存在する要素に応じて提案、例えば「$w(’#button1’)」を提示する。つまり、ユーザには、現在のページに存在する要素についてのみ提案が表示され、他のページの要素については表示されない。これらの提案は、通常のパブリック/バックエンドファイルには表示されず、ページコードを編集する場合にのみ表示される。
2.「wix-data」、「wix-window」など、コードのコンテキストに依存しないWixコードの一般的なAPI。つまり、ページのコードを編集するとき、または通常のパブリック/バックエンドファイルにおいて利用可能である。
3.JSオブジェクトおよび関数、例えば「console.log()」もまた、すべてのファイルタイプで利用可能である。
4.テンプレート。モジュールのインポート(例えば、「’wix-location’から場所をインポートする」)と、forループなどのJS共通テンプレートと、の両方のテンプレート提案を提供する。
5.関数パラメータ。関数のパラメータおよび名前を提示する。
コード補完ウィジェットはまた、選択されたすべての提案の簡単な説明を完全なドキュメントへのリンクと共に提供する。
メディアマネージャの組み込み
ユーザは、画像要素のソースを変更するコードをサイトに追加できる。つまり、実際に表示されるイメージを置き換える。ユーザは、画像のソースプロパティを任意の画像URLに、またはWixメディアマネージャからの画像に設定できる。ソースプロパティを設定しようとする場合、コード補完ウィジェットはメディアマネージャを開くことを提案します。そこで、ユーザは画像を選択でき、そのURL(カスタムWixコードURLプロトコル)がコードに貼り付けられる。例えば、「$w(”#image1”).src=”image://v1/6e7958de786842eb811149ac9c25f73c.jpg/2362_4724/Cotton Candy Cone”」。ユーザはまた、URLにカーソルを合わせることができ、画像を表示するツールチップが開き、画像を置き換えるメディアマネージャを開くためのリンクが表示される。
ユーザは、画像要素のソースを変更するコードをサイトに追加できる。つまり、実際に表示されるイメージを置き換える。ユーザは、画像のソースプロパティを任意の画像URLに、またはWixメディアマネージャからの画像に設定できる。ソースプロパティを設定しようとする場合、コード補完ウィジェットはメディアマネージャを開くことを提案します。そこで、ユーザは画像を選択でき、そのURL(カスタムWixコードURLプロトコル)がコードに貼り付けられる。例えば、「$w(”#image1”).src=”image://v1/6e7958de786842eb811149ac9c25f73c.jpg/2362_4724/Cotton Candy Cone”」。ユーザはまた、URLにカーソルを合わせることができ、画像を表示するツールチップが開き、画像を置き換えるメディアマネージャを開くためのリンクが表示される。
技術的情報
IDEは、オープンソースプロジェクトOrion[https://wiki.eclipse.org/Orion]の上に構築される。独自のカスタムエクスペリエンスとWix固有のバグ修正と動作の変更を提供するために、Orionからの特定のモジュ
ールを独自のモジュールでオーバーライドする。元のOrionコードを修正する代わりに、カスタムモジュールの読み込み構成があり、これは、元のモジュールの代わりにオーバーライドするモジュールをロードすることを把握し、コードを元のソースコードから分離する。
OrionおよびOrionの依存関係を除き、プロダクションコードでは他のライブラリまたはパッケージを使用しない。
コードを構築してテストするために、無数のオープンソースパッケージ、例えばgrunt、mocha、karma、selenium-webdriver、lodashなどを使用する。これらのパッケージのためのコードは開発時にのみ使用され、最終製品の一部としては出荷されない。
コード補完を提供するために、内部モジュール「wixコード参照ドック」に依存している。このモジュールは、API($wなど)を公開するすべてのWixコードライブラリに依存し、コード補完を提供するために必要なすべての情報を保持する1つの大きなファイルを構築する。このファイルは、構築プロセス中にコピーされ、IDEによって実行時に使用される。
コード全体はJavaScriptで記述される。
IDEは、オープンソースプロジェクトOrion[https://wiki.eclipse.org/Orion]の上に構築される。独自のカスタムエクスペリエンスとWix固有のバグ修正と動作の変更を提供するために、Orionからの特定のモジュ
ールを独自のモジュールでオーバーライドする。元のOrionコードを修正する代わりに、カスタムモジュールの読み込み構成があり、これは、元のモジュールの代わりにオーバーライドするモジュールをロードすることを把握し、コードを元のソースコードから分離する。
OrionおよびOrionの依存関係を除き、プロダクションコードでは他のライブラリまたはパッケージを使用しない。
コードを構築してテストするために、無数のオープンソースパッケージ、例えばgrunt、mocha、karma、selenium-webdriver、lodashなどを使用する。これらのパッケージのためのコードは開発時にのみ使用され、最終製品の一部としては出荷されない。
コード補完を提供するために、内部モジュール「wixコード参照ドック」に依存している。このモジュールは、API($wなど)を公開するすべてのWixコードライブラリに依存し、コード補完を提供するために必要なすべての情報を保持する1つの大きなファイルを構築する。このファイルは、構築プロセス中にコピーされ、IDEによって実行時に使用される。
コード全体はJavaScriptで記述される。
06-EPT
エディタプラットフォーム
エディタプラットフォーム
クライアントサイドウェブワーカーおよびSDKを使用することにより、ウェブアプリケーションでカスタムコードを実行させることができる。このプラットフォームにより、再利用可能なコードを記述でき、したがって、同じウェブアプリケーション内で、また複数のウェブアプリケーションにわたって複数のインスタンスに配信することができる。このプラットフォームは、次のコンポーネントから構成される。
・アプリグローバルエンティティ:パート間での共有状態。
・ルータ:URLおよびページ解像度の制御。
・コントローラ:アプリのロジックチャンク、複数のインスタンス。
・API:すべての公開および混合。
エディタプラットフォーム
エディタプラットフォーム
クライアントサイドウェブワーカーおよびSDKを使用することにより、ウェブアプリケーションでカスタムコードを実行させることができる。このプラットフォームにより、再利用可能なコードを記述でき、したがって、同じウェブアプリケーション内で、また複数のウェブアプリケーションにわたって複数のインスタンスに配信することができる。このプラットフォームは、次のコンポーネントから構成される。
・アプリグローバルエンティティ:パート間での共有状態。
・ルータ:URLおよびページ解像度の制御。
・コントローラ:アプリのロジックチャンク、複数のインスタンス。
・API:すべての公開および混合。
アプリケーショングローバルエンティティ
アプリケーションのグローバル状態により、次のようなシナリオが可能になる。
・ショッピングカート、多段階の購入エクスペリエンス中のアイテムの集約
・複数ページのウィザードエクスペリエンス
・多段階のチェックアウトエクスペリエンス(カート、配送情報、アカウント情報)
・終了後にすべての情報を保存するオーサリングエクスペリエンス
このプラットフォームにより、ユーザコードがアプリケーションのグローバル状態を保存できて、上記のシナリオを可能し得る。また、クライアントのウェブワーカーがアプリケーションのロジック態様に影響を与えずにページの遷移およびクリーンアップを実装するための抽象化も提供する。
アプリケーションのグローバル状態により、次のようなシナリオが可能になる。
・ショッピングカート、多段階の購入エクスペリエンス中のアイテムの集約
・複数ページのウィザードエクスペリエンス
・多段階のチェックアウトエクスペリエンス(カート、配送情報、アカウント情報)
・終了後にすべての情報を保存するオーサリングエクスペリエンス
このプラットフォームにより、ユーザコードがアプリケーションのグローバル状態を保存できて、上記のシナリオを可能し得る。また、クライアントのウェブワーカーがアプリケーションのロジック態様に影響を与えずにページの遷移およびクリーンアップを実装するための抽象化も提供する。
アプリケーションルータ
アプリケーションはルータを作成し(セクション8を参照)、これをウェブサイトに登録できる。アプリケーションは構成情報をウェブサイトに保存でき、これにより、アプリケーション開発者はルータのための単一サーバエンドポイントを作成でき、分散ターゲットごとに複数の構成をとることができる。ブログのルーティング要件の例は次のとおりであり得る。
1.domain.com/blog/2016/07/26/my-post
→1.「my post」を表示する一般的な投稿ページ
2.domain.com/blog/2016/07/26
→2.2016年7月26日からのすべての投稿
3.domain.com/blog/2016/07
→3.2016年7月からの最初の10件の投稿
4.domain.com/blog/2016/07?page=2
→4.2016年7月からの#11~#20の投稿
5.domin.com/blog/tag/a-tag-i-use-a-lot
→5.「a-tag-i...」とタグ付けされた最初の10件の投稿。
6.domain.com/blog/category/my-category
→6.「my cat..」というカテゴリからの最初の10件の投稿
7.domain.com/blog/2016/07/26/my-100th-post
→7.第100番目の投稿のためにデザインされた特別な投稿ページ
アプリケーションがルータを構成し、これをインスタンス/サイトごとに保存できるようにすることにより、ルータサーバコードが1回作成され、URL構造は同じでも異なるURL形式(日付あり/なし)および特定の投稿のための特定のページをサポートできる。一般的な使用法は次のとおりである。
・特異性に基づいたカスケードページテンプレート(すなわち、アイテム→製品→デジタルグッズ)
・SEO(検索エンジン最適化)要件に基づく様々なURL形式
・CMS(コンテンツ管理システム)においてコンテンツを追加することによるページの追加
アプリケーションはルータを作成し(セクション8を参照)、これをウェブサイトに登録できる。アプリケーションは構成情報をウェブサイトに保存でき、これにより、アプリケーション開発者はルータのための単一サーバエンドポイントを作成でき、分散ターゲットごとに複数の構成をとることができる。ブログのルーティング要件の例は次のとおりであり得る。
1.domain.com/blog/2016/07/26/my-post
→1.「my post」を表示する一般的な投稿ページ
2.domain.com/blog/2016/07/26
→2.2016年7月26日からのすべての投稿
3.domain.com/blog/2016/07
→3.2016年7月からの最初の10件の投稿
4.domain.com/blog/2016/07?page=2
→4.2016年7月からの#11~#20の投稿
5.domin.com/blog/tag/a-tag-i-use-a-lot
→5.「a-tag-i...」とタグ付けされた最初の10件の投稿。
6.domain.com/blog/category/my-category
→6.「my cat..」というカテゴリからの最初の10件の投稿
7.domain.com/blog/2016/07/26/my-100th-post
→7.第100番目の投稿のためにデザインされた特別な投稿ページ
アプリケーションがルータを構成し、これをインスタンス/サイトごとに保存できるようにすることにより、ルータサーバコードが1回作成され、URL構造は同じでも異なるURL形式(日付あり/なし)および特定の投稿のための特定のページをサポートできる。一般的な使用法は次のとおりである。
・特異性に基づいたカスケードページテンプレート(すなわち、アイテム→製品→デジタルグッズ)
・SEO(検索エンジン最適化)要件に基づく様々なURL形式
・CMS(コンテンツ管理システム)においてコンテンツを追加することによるページの追加
コントローラ
コントローラにより、ユーザコードの作成者は、コードをコンポーネントのリストと共に再利用可能な仕方でパッケージ化できる。通常の(Wixコード)メソッドでは、ユーザはページに一意のIDに基づいてコンポーネントにアクセスする。このことは、同じページで2回まで使用するオプションを減らし、配信が困難にする。コントローラには次のプロパティがある。
・構成であり、サイトに保存する。この構成により、コントローラのインスタンスを別のインスタンスと区別する仕方が提供されるため、コードを再利用できる。例えば、コントローラコードが外部データソースに接続し、情報を取得し、画像およびテキストを使用してそれを提示する場合、構成はリモートシステムにおけるアイテムIDになる。このように、同じページ上の2つの別個のコントローラは、異なる画像およびテキストコンポーネントを使用して、リモートシステムにおいて2つのアイテムを表すことができる。
・ロール(文字列)を名前として使用し、接続構成を使用したコンポーネントへの接続。これにより、コンポーネントがページで受け取るIDに関係なく、コントローラコードを事前に記述してから配信できる。これは、同じIDを持つことができない2つの異なるコンポーネントにアクセスする同じページ上の2つ以上のコントローラに特に役立つ。ほとんどの場合、コントローラはロールを使用して操作するためにコンポーネントを選択する(セクション15のセレクタを参照)。各コンポーネントには複数のロールを定義して、複雑なデータバインディングシナリオと行動プログラミングモデルを実現できるが、複数のコントローラは定義できない。(つまり、各コントローラはコンポーネントの異なる態様を担当する。例えば、ドロップダウンコンポーネントは1つのコントローラからオプションのリストを取得し、選択したパラメータを別のコントローラに保存できる)。
コントローラにより、ユーザコードの作成者は、コードをコンポーネントのリストと共に再利用可能な仕方でパッケージ化できる。通常の(Wixコード)メソッドでは、ユーザはページに一意のIDに基づいてコンポーネントにアクセスする。このことは、同じページで2回まで使用するオプションを減らし、配信が困難にする。コントローラには次のプロパティがある。
・構成であり、サイトに保存する。この構成により、コントローラのインスタンスを別のインスタンスと区別する仕方が提供されるため、コードを再利用できる。例えば、コントローラコードが外部データソースに接続し、情報を取得し、画像およびテキストを使用してそれを提示する場合、構成はリモートシステムにおけるアイテムIDになる。このように、同じページ上の2つの別個のコントローラは、異なる画像およびテキストコンポーネントを使用して、リモートシステムにおいて2つのアイテムを表すことができる。
・ロール(文字列)を名前として使用し、接続構成を使用したコンポーネントへの接続。これにより、コンポーネントがページで受け取るIDに関係なく、コントローラコードを事前に記述してから配信できる。これは、同じIDを持つことができない2つの異なるコンポーネントにアクセスする同じページ上の2つ以上のコントローラに特に役立つ。ほとんどの場合、コントローラはロールを使用して操作するためにコンポーネントを選択する(セクション15のセレクタを参照)。各コンポーネントには複数のロールを定義して、複雑なデータバインディングシナリオと行動プログラミングモデルを実現できるが、複数のコントローラは定義できない。(つまり、各コントローラはコンポーネントの異なる態様を担当する。例えば、ドロップダウンコンポーネントは1つのコントローラからオプションのリストを取得し、選択したパラメータを別のコントローラに保存できる)。
API
各コントローラは、独自のAPIを公開できる。これにより、コントローラがコンポーネントとして表示され、同様の動作が行われる。サイトレベルまたは他のコントローラの他のコード作成者がコントローラコードをブラックボックスとして再利用できるようにし、コントローラをランタイム環境の拡張ブロックに変える。
各コントローラは、独自のAPIを公開できる。これにより、コントローラがコンポーネントとして表示され、同様の動作が行われる。サイトレベルまたは他のコントローラの他のコード作成者がコントローラコードをブラックボックスとして再利用できるようにし、コントローラをランタイム環境の拡張ブロックに変える。
07-CSWW
クライアントサイドウェブワーカー
クライアントサイドウェブワーカー
クライアントサイドウェブワーカーにより、カスタム機能を使用してウェブサイトを拡張できる。その拡張の最も一般的な使用法は次のとおりである。
・サイトの動的コンテンツ強化
・カスタムユーザフロー
・カスタム対話
これを可能にするために、SLA、セキュリティ、およびこれらの拡張機能をユニファイドクラウドでホストする能力を維持しながら、次のアーキテクチャが使用される。
以下は、システムの論理コンポーネントのリストである。
・サイトトップフレーム:これはウェブアプリケーションのメインページである。ユーザのドメインまたはホスティングサービスの一般的なドメイン(Wix)で提供される。これはウェブアプリケーションを実行するメインエンジンであり、別名「ビューア」または「ランタイム環境」である。
・IFrameサンドボックス:悪意のあるコード(クッキーハイジャックなど)からトップフレームのセキュリティを保護するために、異なるドメインを持つIFrameが構築される。ドメインの違いは、サンドボックスシステムリソース(ウィンドウ、クッキーなど)およびメモリである(すべての通信はpostMessageのみを使用して実行でき、メモリ共有は使用できない)。
・ウェブワーカー:ウェブワーカーは、非同期コードの実行を可能にする標準的なブラウザ機能である。すべての通信はpostMessageを介して可能であり、ウェブワーカーでグローバルに利用可能なAPIサーフェスはトップフレームよりもはるかに制限されているため、ウェブワーカーはトップフレームに別の保護レイヤを作成する。例えば、ウィンドウグローバルオブジェクトは利用可能ではなく、DOM(ドキュメントオブジェクトモデル)アクセスは禁止されており、つまり、ウェブワーカーコードはUI要素を操作できない。ウェブワーカーのセキュリティ上の利点に加えて、非同期の性質により、ウェブワーカーがCPUを集中的に使用している場合でもトップフレームが応答を停止することはないことが確保される。別の利点は、トップフレーム実行コンテキストを遮るこ
となくユーザコード(ウェブワーカーで実行中のコード)をデバッグおよび一時停止できユーザが、ブレークポイント中でも、UIレイヤにおいてユーザコードの伝播を確認できることである。
・RMI(リモートモデルインターフェース):このコンポーネントは、トップフレームの論理モデルを作成および維持し、postMessageトランスポートレイヤを介してウェブワーカーと共有する役割を果たす。モデルの変更は、ウェブアプリケーションに影響を与える。例えば、ボタンのテキストおよびリンクはモデルで表される。モデル内のこれらの値の変更は、視覚的なボタンコンポーネントおよびその機能に影響を与える。加えて、RMIレイヤにより、ウェブワーカーがトップフレームで事前定義されたメソッドを呼び出すことができる。これは、ウェブワーカーの機能を強化し、モデル(すなわち、アニメーション)で表されるように、状態に関連しないアクションを実行するために使用される。リモートモデルは非同期バリアをブリッジし、同期コードをユーザコードが認識できるようにし、これは、記述は単純であるが、アクションは非同期である。例えば、ユーザコードは画像URLをAからBに変更する。コードの次の行は、次のアクションを決定するための値を示す。モデルの値は既にAからBに変更されているため、一貫した値であるBを返すが、モデルの非同期動作は、ウェブアプリケーションのUIに既に表示されていることを保証しない。
・SDK:SDKは、RMIモデルの上にあるラッピングレイヤである。より単純なAPIをユーザコードに公開し、モデルを一貫性のあるドキュメント化されたメソッド呼び出しならびにプロパティセッターおよびゲッターに簡素化するために使用される。ライフサイクルメソッドおよび$wオブジェクトをユーザコードのベースコンテキストとして公開する。詳細な説明は、セクション15で提供される。
クライアントサイドウェブワーカー
クライアントサイドウェブワーカー
クライアントサイドウェブワーカーにより、カスタム機能を使用してウェブサイトを拡張できる。その拡張の最も一般的な使用法は次のとおりである。
・サイトの動的コンテンツ強化
・カスタムユーザフロー
・カスタム対話
これを可能にするために、SLA、セキュリティ、およびこれらの拡張機能をユニファイドクラウドでホストする能力を維持しながら、次のアーキテクチャが使用される。
以下は、システムの論理コンポーネントのリストである。
・サイトトップフレーム:これはウェブアプリケーションのメインページである。ユーザのドメインまたはホスティングサービスの一般的なドメイン(Wix)で提供される。これはウェブアプリケーションを実行するメインエンジンであり、別名「ビューア」または「ランタイム環境」である。
・IFrameサンドボックス:悪意のあるコード(クッキーハイジャックなど)からトップフレームのセキュリティを保護するために、異なるドメインを持つIFrameが構築される。ドメインの違いは、サンドボックスシステムリソース(ウィンドウ、クッキーなど)およびメモリである(すべての通信はpostMessageのみを使用して実行でき、メモリ共有は使用できない)。
・ウェブワーカー:ウェブワーカーは、非同期コードの実行を可能にする標準的なブラウザ機能である。すべての通信はpostMessageを介して可能であり、ウェブワーカーでグローバルに利用可能なAPIサーフェスはトップフレームよりもはるかに制限されているため、ウェブワーカーはトップフレームに別の保護レイヤを作成する。例えば、ウィンドウグローバルオブジェクトは利用可能ではなく、DOM(ドキュメントオブジェクトモデル)アクセスは禁止されており、つまり、ウェブワーカーコードはUI要素を操作できない。ウェブワーカーのセキュリティ上の利点に加えて、非同期の性質により、ウェブワーカーがCPUを集中的に使用している場合でもトップフレームが応答を停止することはないことが確保される。別の利点は、トップフレーム実行コンテキストを遮るこ
となくユーザコード(ウェブワーカーで実行中のコード)をデバッグおよび一時停止できユーザが、ブレークポイント中でも、UIレイヤにおいてユーザコードの伝播を確認できることである。
・RMI(リモートモデルインターフェース):このコンポーネントは、トップフレームの論理モデルを作成および維持し、postMessageトランスポートレイヤを介してウェブワーカーと共有する役割を果たす。モデルの変更は、ウェブアプリケーションに影響を与える。例えば、ボタンのテキストおよびリンクはモデルで表される。モデル内のこれらの値の変更は、視覚的なボタンコンポーネントおよびその機能に影響を与える。加えて、RMIレイヤにより、ウェブワーカーがトップフレームで事前定義されたメソッドを呼び出すことができる。これは、ウェブワーカーの機能を強化し、モデル(すなわち、アニメーション)で表されるように、状態に関連しないアクションを実行するために使用される。リモートモデルは非同期バリアをブリッジし、同期コードをユーザコードが認識できるようにし、これは、記述は単純であるが、アクションは非同期である。例えば、ユーザコードは画像URLをAからBに変更する。コードの次の行は、次のアクションを決定するための値を示す。モデルの値は既にAからBに変更されているため、一貫した値であるBを返すが、モデルの非同期動作は、ウェブアプリケーションのUIに既に表示されていることを保証しない。
・SDK:SDKは、RMIモデルの上にあるラッピングレイヤである。より単純なAPIをユーザコードに公開し、モデルを一貫性のあるドキュメント化されたメソッド呼び出しならびにプロパティセッターおよびゲッターに簡素化するために使用される。ライフサイクルメソッドおよび$wオブジェクトをユーザコードのベースコンテキストとして公開する。詳細な説明は、セクション15で提供される。
08A-RTR
ルータ
RTR ルータ
ルータにより、サイト所有者がサイトのカスタムURL構造を定義できる。ルータは、特定のURLをページに解決するために動的ページによって使用され、サイトマップ要求を介してサイトで利用可能なすべてのページを取得するためにSEOおよびエディタによって使用される。ルータはまた、ページに関連付けられる追加のSEO情報も公開する。ルータには2つのタイプ、すなわちデータバインディングルータおよびカスタムルータがある。ルータはELM内で実行されるバックエンドコンポーネントである。
データバインディングルータは、サイト所有者から提供された1つ以上のデータベースフィールドおよびカスタムテキストフラグメントに基づいてURL構造を自動的に接続する。これは、エディタのUIを使用して完全に実行でき、ユーザコードは必要としない。加えて、これらのルータはフックによってカスタマイズされ、これにより、ユーザコードがルータに渡されるパラメータを修正し、応答を修正し、WDTに発行されたクエリを修正できる。
カスタムルータは、サイトの所有者にURL構造の完全な制御を提供する。エディタから、サイトの所有者は特定のプレフィックスのためのルータを作成でき、URLの残りの部分がカスタムルータによって解釈される。ルータ要求は、ユーザが提供する2つの関数、すなわちルータ関数およびサイトマップ関数により処理される。ルータ関数は、単一のURLの特定のページへの解決を処理する。WixルータAPIは、この要求に渡されるデータを説明している。この関数は、追加のSEO情報と共に、APIで事前定義された応答(例えば、OK、見つかりません、禁止など)のうちの1つを返すことが期待されている。サイトマップ関数は、ルートで利用可能なすべてのページをリストすることが期待されていることを除いて同様である。
動的ルーティングは、2つのコラボレータによって実現され、1つはユーザのブラウザで実行され、もう1つはバックエンドで実行される。動的ルータにより処理されるURLを介してページがロードされると、ブラウザにデフォルトのHTMLページがロードされ
、表示するページを判定するためにバックエンドに対してAJAX要求が行われる。コードのバックエンド部分は、どのプレフィックスがどのルータで処理されるかを認識していない。ルータが表示することを選択できるページを含む、URLを解決するために必要なすべてのデータはこの要求で送信され、バックエンドからの応答は、ページの適切な動的ページを開き、それにデータを投入するために使用される。ルータは、ページが開かれるときにページに公開されるデータを入力することを選択でき、そのため、サーバへの別のラウンドトリップを回避できる。
ルータ
RTR ルータ
ルータにより、サイト所有者がサイトのカスタムURL構造を定義できる。ルータは、特定のURLをページに解決するために動的ページによって使用され、サイトマップ要求を介してサイトで利用可能なすべてのページを取得するためにSEOおよびエディタによって使用される。ルータはまた、ページに関連付けられる追加のSEO情報も公開する。ルータには2つのタイプ、すなわちデータバインディングルータおよびカスタムルータがある。ルータはELM内で実行されるバックエンドコンポーネントである。
データバインディングルータは、サイト所有者から提供された1つ以上のデータベースフィールドおよびカスタムテキストフラグメントに基づいてURL構造を自動的に接続する。これは、エディタのUIを使用して完全に実行でき、ユーザコードは必要としない。加えて、これらのルータはフックによってカスタマイズされ、これにより、ユーザコードがルータに渡されるパラメータを修正し、応答を修正し、WDTに発行されたクエリを修正できる。
カスタムルータは、サイトの所有者にURL構造の完全な制御を提供する。エディタから、サイトの所有者は特定のプレフィックスのためのルータを作成でき、URLの残りの部分がカスタムルータによって解釈される。ルータ要求は、ユーザが提供する2つの関数、すなわちルータ関数およびサイトマップ関数により処理される。ルータ関数は、単一のURLの特定のページへの解決を処理する。WixルータAPIは、この要求に渡されるデータを説明している。この関数は、追加のSEO情報と共に、APIで事前定義された応答(例えば、OK、見つかりません、禁止など)のうちの1つを返すことが期待されている。サイトマップ関数は、ルートで利用可能なすべてのページをリストすることが期待されていることを除いて同様である。
動的ルーティングは、2つのコラボレータによって実現され、1つはユーザのブラウザで実行され、もう1つはバックエンドで実行される。動的ルータにより処理されるURLを介してページがロードされると、ブラウザにデフォルトのHTMLページがロードされ
、表示するページを判定するためにバックエンドに対してAJAX要求が行われる。コードのバックエンド部分は、どのプレフィックスがどのルータで処理されるかを認識していない。ルータが表示することを選択できるページを含む、URLを解決するために必要なすべてのデータはこの要求で送信され、バックエンドからの応答は、ページの適切な動的ページを開き、それにデータを投入するために使用される。ルータは、ページが開かれるときにページに公開されるデータを入力することを選択でき、そのため、サーバへの別のラウンドトリップを回避できる。
08B-RTR
ルータ-詳細
動的ルーティング
データバインディングルータ
カスタムルーティング
はじめに
動的ルーティングモデル
動的ルーティングモデルの基本コンポーネント
ルーティングのさらなる詳細な説明
ルータエンドポイント
URL解決エンドポイント
URL解決エンドポイント入力
URL解決エンドポイント出力
ページロールの詳細
サイトマップエンドポイント
サイトマップを正しく実装する
ユーザクレデンシャルの考慮
404応答コードを返すことになるURLの考慮
ルートの考慮
動的ページ上の「ノーインデックス」フラグの考慮
サイトマップエンドポイント入力
サイトマップエンドポイント出力
注記:プレビューピッカー
注記:リンク作成
動的ルーティングおよびSEOメタタグ
HTTPクッキーおよびヘッダ
404ページおよび403ページ
動的ルータを実装する際のクロスドメインの問題
完全な例
データバインディングルータ
データバインディングのコンセプトの簡単な要約
データバインディングルータ
URLをWixデータクエリに変換する
データをクライアントに返す
データセットを用いて取得したデータをUI要素にバインドする
URLパターンからリンクを作成する
スキーマの拡張
一時的計算フィールド
参照フィールド
データバインディングルータに関する他の考慮事項
データバインディングルータにおけるページロール
SEOメタタグを指定する
サイトマップエンドポイント
データバインディングルータ上のフック
未解決の問題
カスタムルータ
はじめに
このドキュメントでは、エディタ/ビューアスタックに追加する予定の動的ルーティング機能の背後にあるアーキテクチャおよび様々なサブシステムを概説する。次に、このドキュメントでは、新しいデータバインディングルータを概説し、動的ルーティングモデルの上に構築する仕方について概説する。最後に、このドキュメントでは、開発者が独自の動的ルーティング実装を作成するためにカスタムルータを構築する仕方について説明する。
ルータ-詳細
動的ルーティング
データバインディングルータ
カスタムルーティング
はじめに
動的ルーティングモデル
動的ルーティングモデルの基本コンポーネント
ルーティングのさらなる詳細な説明
ルータエンドポイント
URL解決エンドポイント
URL解決エンドポイント入力
URL解決エンドポイント出力
ページロールの詳細
サイトマップエンドポイント
サイトマップを正しく実装する
ユーザクレデンシャルの考慮
404応答コードを返すことになるURLの考慮
ルートの考慮
動的ページ上の「ノーインデックス」フラグの考慮
サイトマップエンドポイント入力
サイトマップエンドポイント出力
注記:プレビューピッカー
注記:リンク作成
動的ルーティングおよびSEOメタタグ
HTTPクッキーおよびヘッダ
404ページおよび403ページ
動的ルータを実装する際のクロスドメインの問題
完全な例
データバインディングルータ
データバインディングのコンセプトの簡単な要約
データバインディングルータ
URLをWixデータクエリに変換する
データをクライアントに返す
データセットを用いて取得したデータをUI要素にバインドする
URLパターンからリンクを作成する
スキーマの拡張
一時的計算フィールド
参照フィールド
データバインディングルータに関する他の考慮事項
データバインディングルータにおけるページロール
SEOメタタグを指定する
サイトマップエンドポイント
データバインディングルータ上のフック
未解決の問題
カスタムルータ
はじめに
このドキュメントでは、エディタ/ビューアスタックに追加する予定の動的ルーティング機能の背後にあるアーキテクチャおよび様々なサブシステムを概説する。次に、このドキュメントでは、新しいデータバインディングルータを概説し、動的ルーティングモデルの上に構築する仕方について概説する。最後に、このドキュメントでは、開発者が独自の動的ルーティング実装を作成するためにカスタムルータを構築する仕方について説明する。
動的ルーティングモデル
動的ルーティングにより、wixサイト/アプリで動的URLを定義および管理できる。これにより、ユーザおよびエディタアプリは、公開時に知られるURLを持つ静的なページ以上のものを持つサイトを作成できる。
最終的にユーザおよびアプリは次のことができる。
-具体的なレンダリングされたページにマップするURLパターンを定義する
-コンテンツが到来する動的URLに依存する動的ページを作成する
-これらのURLをボット(検索エンジンおよび同様の自動化されたコンシューマ)に公開する
動的ルーティングにより、wixサイト/アプリで動的URLを定義および管理できる。これにより、ユーザおよびエディタアプリは、公開時に知られるURLを持つ静的なページ以上のものを持つサイトを作成できる。
最終的にユーザおよびアプリは次のことができる。
-具体的なレンダリングされたページにマップするURLパターンを定義する
-コンテンツが到来する動的URLに依存する動的ページを作成する
-これらのURLをボット(検索エンジンおよび同様の自動化されたコンシューマ)に公開する
動的ルーティングモデルの基本コンポーネント
このモデルの基本コンポーネントは、アプリ、ルータ、ルート、ルータエンドポイント、URL、動的ページ、ページロール、およびサイトマップである。以下では、それらと、それらがやり取りして動的ルーティングモデルを作成する仕方について説明する。
動的ルーティングを可能にする基本的な構造はルータである。ルータはアプリによって所有される。必要に応じて、各アプリに複数のルータがある場合がある。
ルータは、特定の到来するURLを、ビューアがレンダリングする特定の動的ページに解決する役割を果たす。
到来する動的URLは次の構造を有する:<site>/<prefix>/<suffix>:
-<site>:プレミアムサイトの場合は<my.site.com>の形を有し、無料サイトの場合は<user_name.wixsite.com/site_name>の形を有する。
-<prefix>:この部分は、到来するURLを処理するルータを判定する部分である。各ルータは、サイトヘッダに1セットの一意のプレフィックスを登録する。この情報は、エディタランタイムによって管理される。エディタは、2つのルータが同じプレフィックスを定義しないことを確保する。
-<suffix>:プレフィックスの後に来るあらゆるもの。この部分は、プレフィックスと共に、到来するURLを解決するためにルータによって後で使用される。
各ルータは1つまたは複数のルートをサポートする。ルートは、URLの<suffix>部分のテンプレートである。ルートの例(ルートを太字で示す)は次のとおりである。
-my.site.com/blog/
-my.site.com/blog/post-{id}
-my.site.com/blog/{year}/{month}/
-my.site.com/blog/featured-posts
アプリは、可能なすべてのルートを常にサポートするのであってもよいし、有効にするルートと無効にするルートとをユーザに選択させるのであってもよい。例えば、ブログア
プリでは、注目記事機能を使用するか否かを決定するのはユーザに委ねられていてもよい。
異なるルート間の違いを認識できるように確保するのは、アプリおよび特定のルータに委ねられていることに留意されたい。ブログアプリのための次の2つのルートを考える。
-my.site.com/blog/{year}/
-my.site.com/blog/{author}/
到来するURLを復号するために使用するルートを判断するのが難しい場合がある-「2016」という名前の作成者がいる可能性がある-そのような場合には、代わりに次のルートを作成する方がよい場合がある。
-my.site.com/blog/{year}/
-my.site.com/blog/authors/{author}/
動的ページは、単純に、ルータがルーティングできる任意のページである。動的ページはルータによって所有されている。つまり、すべてのルータは、そのルータだけがルーティングできる1セットの動的ページを有する。したがって、ルータは「レガシー」静的ページにルーティングできない。
各動的ページには、1つまたは複数のページロールが割り当てられる。ページロールは、ルータが、到来するURLを、レンダリングするための具体的なページに解決する仕方を決定するのに役立つ。
(簡略化された)アルゴリズムは次のように動作する。
1.[ビューアランタイム]<prefix>部分に基づいて、到来するURLが解析されて、どのルータがそれを解決するかを決定する
2.[ビューアランタイム]は、選択したルータのURL解決エンドポイントを呼び出し、ルータが特定の動的ページIDにURLを解決するために必要な情報を渡す。
3.[選択されたルータ]到来するURLのためのページロールの順序付きリストを計算する
4.[選択されたルータ]動的ページのリストとそれに関連付けられたページロールに基づいて、解決する動的ページIDを選択する。順序付きリストの各ページロールについて、ルータはそのロールに整合する動的ページを探す。そのロールを持つ動的ページが見つかると、検索は終了する。ページが見つからない場合、URLは404応答コードに解決される。
5.[選択されたルータ]選択されたページIDを、動的ページ(最も重要なこととして、オプションのデータペイロード)のレンダリングに必要な補助情報と共に、ビューアに返す。
6.[ビューア]選択された動的ページをレンダリングする
ルータが異なる到来するルートを同じページIDに解決するのはまったく問題ないことに留意されたい。例えば、動物園管理アプリケーションを考える。このアプリケーションは、<zoo>プレフィックスの下にルータを登録し、次の2つのルートをサポートする。
-/zoo/animal_of_the_day
-/zoo/animals/{{animal_name}}
この場合、両方のルートともページロール{animal_page}に解決される。到来するURLが</zoo/animals/tiger>であり、現在虎が「今日の動物」である場合、両方のルートとも動物をレンダリングする動的ページに解決され、両方とも画面上に美しい虎をレンダリングする。
このモデルの基本コンポーネントは、アプリ、ルータ、ルート、ルータエンドポイント、URL、動的ページ、ページロール、およびサイトマップである。以下では、それらと、それらがやり取りして動的ルーティングモデルを作成する仕方について説明する。
動的ルーティングを可能にする基本的な構造はルータである。ルータはアプリによって所有される。必要に応じて、各アプリに複数のルータがある場合がある。
ルータは、特定の到来するURLを、ビューアがレンダリングする特定の動的ページに解決する役割を果たす。
到来する動的URLは次の構造を有する:<site>/<prefix>/<suffix>:
-<site>:プレミアムサイトの場合は<my.site.com>の形を有し、無料サイトの場合は<user_name.wixsite.com/site_name>の形を有する。
-<prefix>:この部分は、到来するURLを処理するルータを判定する部分である。各ルータは、サイトヘッダに1セットの一意のプレフィックスを登録する。この情報は、エディタランタイムによって管理される。エディタは、2つのルータが同じプレフィックスを定義しないことを確保する。
-<suffix>:プレフィックスの後に来るあらゆるもの。この部分は、プレフィックスと共に、到来するURLを解決するためにルータによって後で使用される。
各ルータは1つまたは複数のルートをサポートする。ルートは、URLの<suffix>部分のテンプレートである。ルートの例(ルートを太字で示す)は次のとおりである。
-my.site.com/blog/
-my.site.com/blog/post-{id}
-my.site.com/blog/{year}/{month}/
-my.site.com/blog/featured-posts
アプリは、可能なすべてのルートを常にサポートするのであってもよいし、有効にするルートと無効にするルートとをユーザに選択させるのであってもよい。例えば、ブログア
プリでは、注目記事機能を使用するか否かを決定するのはユーザに委ねられていてもよい。
異なるルート間の違いを認識できるように確保するのは、アプリおよび特定のルータに委ねられていることに留意されたい。ブログアプリのための次の2つのルートを考える。
-my.site.com/blog/{year}/
-my.site.com/blog/{author}/
到来するURLを復号するために使用するルートを判断するのが難しい場合がある-「2016」という名前の作成者がいる可能性がある-そのような場合には、代わりに次のルートを作成する方がよい場合がある。
-my.site.com/blog/{year}/
-my.site.com/blog/authors/{author}/
動的ページは、単純に、ルータがルーティングできる任意のページである。動的ページはルータによって所有されている。つまり、すべてのルータは、そのルータだけがルーティングできる1セットの動的ページを有する。したがって、ルータは「レガシー」静的ページにルーティングできない。
各動的ページには、1つまたは複数のページロールが割り当てられる。ページロールは、ルータが、到来するURLを、レンダリングするための具体的なページに解決する仕方を決定するのに役立つ。
(簡略化された)アルゴリズムは次のように動作する。
1.[ビューアランタイム]<prefix>部分に基づいて、到来するURLが解析されて、どのルータがそれを解決するかを決定する
2.[ビューアランタイム]は、選択したルータのURL解決エンドポイントを呼び出し、ルータが特定の動的ページIDにURLを解決するために必要な情報を渡す。
3.[選択されたルータ]到来するURLのためのページロールの順序付きリストを計算する
4.[選択されたルータ]動的ページのリストとそれに関連付けられたページロールに基づいて、解決する動的ページIDを選択する。順序付きリストの各ページロールについて、ルータはそのロールに整合する動的ページを探す。そのロールを持つ動的ページが見つかると、検索は終了する。ページが見つからない場合、URLは404応答コードに解決される。
5.[選択されたルータ]選択されたページIDを、動的ページ(最も重要なこととして、オプションのデータペイロード)のレンダリングに必要な補助情報と共に、ビューアに返す。
6.[ビューア]選択された動的ページをレンダリングする
ルータが異なる到来するルートを同じページIDに解決するのはまったく問題ないことに留意されたい。例えば、動物園管理アプリケーションを考える。このアプリケーションは、<zoo>プレフィックスの下にルータを登録し、次の2つのルートをサポートする。
-/zoo/animal_of_the_day
-/zoo/animals/{{animal_name}}
この場合、両方のルートともページロール{animal_page}に解決される。到来するURLが</zoo/animals/tiger>であり、現在虎が「今日の動物」である場合、両方のルートとも動物をレンダリングする動的ページに解決され、両方とも画面上に美しい虎をレンダリングする。
ルーティングのさらなる詳細な説明
これまで見てきたように、ビューアはルータを使用して、レンダリングするためのページを解決する。しかしながら、動的ページを正しくレンダリングするためには、考慮すべき点がさらにいくつかある。
このことを詳細に説明するこちらの図を参照されたい。
これまで見てきたように、ビューアはルータを使用して、レンダリングするためのページを解決する。しかしながら、動的ページを正しくレンダリングするためには、考慮すべき点がさらにいくつかある。
このことを詳細に説明するこちらの図を参照されたい。
ルータエンドポイント
各ルータは、次の2つのエンドポイントをサポートする必要がある。
-URLエンドポイントの解決:到来するURLをページIDに解決するために使用される
-サイトマップエンドポイントの取得:このルータが解決できるURLの完全なリストを取得するために使用される
これらのエンドポイントおよびその動作の詳細を以下に示す。
各ルータは、次の2つのエンドポイントをサポートする必要がある。
-URLエンドポイントの解決:到来するURLをページIDに解決するために使用される
-サイトマップエンドポイントの取得:このルータが解決できるURLの完全なリストを取得するために使用される
これらのエンドポイントおよびその動作の詳細を以下に示す。
URL解決エンドポイント
このエンドポイントは、到来するURLを特定の動的ページに解決する必要がある場合に使用される。
このエンドポイントは、到来するURLを特定の動的ページに解決する必要がある場合に使用される。
URL解決エンドポイント入力
到来するURLを解決するために、ルータは次の情報を潜在的に必要とする。
-URLのパート(サイト、プレフィックス、サフィックス)。これにはURLクエリ文字列(「?」の文字の後、および「#」の文字の前のパート)を含める必要があることに留意されたい。
-アプリ符号付き署名インスタンス:ルータエンドポイントは、到来する要求がどのサイトからのものであるかがわかるように、アプリケーションインスタンスIDを知っている必要がある。例えば、ブログアプリケーションを考える。特定のブログ投稿に関して到来するURLを解決するには、ルータはブログアプリインスタンスを知っている必要がある。
-ユーザクレデンシャル:符号付きインスタンスの一部である。ルータは、現在要求を発行しているユーザのユーザクレデンシャルを知る必要がある。これは、例えば、そのユーザが要求された特定のページの情報を表示することを許可されているか否かを知るために必要とされている。例えば、ブログルータは、匿名ユーザがmy.site.com/blog/adminの背後にあるページを表示することを禁止したい場合がある。
-ルートアレイ:[これはルータ構成の一部である。]このアプリインスタンスがサポートするルートの配列。通常、各ルートは、そのURLパターン、この特定のルートに関するタイトルおよび他のSEOメタタグなどに関する情報を提供する。詳細については、以下のSEOセクションを参照されたい。
-ルータ構成:アプリおよびルータ固有の追加情報。例えば、ブログアプリを考える。このアプリが所与の著者のすべての投稿を含む動的ページを提供すると仮定する。このようなページのURLは、my.site.com/{{author_name}}のようになる。この場合、これらのURLを処理するルータがあり、投稿データベース内の特定の著者IDに著者名をマッピングできる必要がある。そのマッピングを行うために、ルータ構成は次のものを持つ:{author_ID:123}.ルータエンドポイントが呼び出されると、author_ID 123の投稿が取得される。
-動的ページおよびそれに関連するロールのリスト:上記で説明したようなロールマッチングに基づいてレンダリングするページIDを選択するためにルータによって使用される。
到来するURLを解決するために、ルータは次の情報を潜在的に必要とする。
-URLのパート(サイト、プレフィックス、サフィックス)。これにはURLクエリ文字列(「?」の文字の後、および「#」の文字の前のパート)を含める必要があることに留意されたい。
-アプリ符号付き署名インスタンス:ルータエンドポイントは、到来する要求がどのサイトからのものであるかがわかるように、アプリケーションインスタンスIDを知っている必要がある。例えば、ブログアプリケーションを考える。特定のブログ投稿に関して到来するURLを解決するには、ルータはブログアプリインスタンスを知っている必要がある。
-ユーザクレデンシャル:符号付きインスタンスの一部である。ルータは、現在要求を発行しているユーザのユーザクレデンシャルを知る必要がある。これは、例えば、そのユーザが要求された特定のページの情報を表示することを許可されているか否かを知るために必要とされている。例えば、ブログルータは、匿名ユーザがmy.site.com/blog/adminの背後にあるページを表示することを禁止したい場合がある。
-ルートアレイ:[これはルータ構成の一部である。]このアプリインスタンスがサポートするルートの配列。通常、各ルートは、そのURLパターン、この特定のルートに関するタイトルおよび他のSEOメタタグなどに関する情報を提供する。詳細については、以下のSEOセクションを参照されたい。
-ルータ構成:アプリおよびルータ固有の追加情報。例えば、ブログアプリを考える。このアプリが所与の著者のすべての投稿を含む動的ページを提供すると仮定する。このようなページのURLは、my.site.com/{{author_name}}のようになる。この場合、これらのURLを処理するルータがあり、投稿データベース内の特定の著者IDに著者名をマッピングできる必要がある。そのマッピングを行うために、ルータ構成は次のものを持つ:{author_ID:123}.ルータエンドポイントが呼び出されると、author_ID 123の投稿が取得される。
-動的ページおよびそれに関連するロールのリスト:上記で説明したようなロールマッチングに基づいてレンダリングするページIDを選択するためにルータによって使用される。
URL解決エンドポイント出力
-ルータがURLを解決した一次結果をレンダリングするためのページID。
-HTTP応答コード:URLを扱っているため、可能性のあるHTTP応答コードを考慮する必要がある。具体的には、応答コードは{200、301、302、403、404}を含む。ビューアランタイムはこれらのコードを使用して正しく動作する。
-データペイロード:ルータは、後で特定の動的ページのレンダリングに使用されるデータペイロードを返す可能性がある。このペイロードは、例えば、ページ上のコンポーネ
ントにバインドするために使用されるデータセットに供給できる。
-タイトル:レンダリングされるページのタイトル。ビューアランタイムはこれを使用して、ブラウザのためのページのタイトルを設定する。タイトルは、特定の動的ページに対して取得されたコンテンツに基づいて計算され得る。通常、ルートが異なるとタイトルが異なり得る。例えば、</zoo/animal_of_the_day/>というルートは、「今日の動物-虎!」というタイトルと共に動物を表示する動的ページに解決され得る。</zoo/animals/tiger>というルートは同じ動的ページに解決され得るが、タイトルは単に「当園の虎」になり得る。したがって、タイトルを作成するためのテンプレートは通常、その特定のルートのためのルータ構成の一部である。
-SEOメタタグ:SEO関連の情報。これについては後で詳述する。
-ルータがURLを解決した一次結果をレンダリングするためのページID。
-HTTP応答コード:URLを扱っているため、可能性のあるHTTP応答コードを考慮する必要がある。具体的には、応答コードは{200、301、302、403、404}を含む。ビューアランタイムはこれらのコードを使用して正しく動作する。
-データペイロード:ルータは、後で特定の動的ページのレンダリングに使用されるデータペイロードを返す可能性がある。このペイロードは、例えば、ページ上のコンポーネ
ントにバインドするために使用されるデータセットに供給できる。
-タイトル:レンダリングされるページのタイトル。ビューアランタイムはこれを使用して、ブラウザのためのページのタイトルを設定する。タイトルは、特定の動的ページに対して取得されたコンテンツに基づいて計算され得る。通常、ルートが異なるとタイトルが異なり得る。例えば、</zoo/animal_of_the_day/>というルートは、「今日の動物-虎!」というタイトルと共に動物を表示する動的ページに解決され得る。</zoo/animals/tiger>というルートは同じ動的ページに解決され得るが、タイトルは単に「当園の虎」になり得る。したがって、タイトルを作成するためのテンプレートは通常、その特定のルートのためのルータ構成の一部である。
-SEOメタタグ:SEO関連の情報。これについては後で詳述する。
ページロールの詳細
上で説明したように、システムはページロールを使用して、解決する実際の動的ページを判定する。ページロールにより、アプリはフォールバックを作成できる。つまり、アプリのユーザが特定のコンテンツのために特定の動的ページを作成でき、これが他のコンテンツに使用される標準の動的ページとは異なる場合があることを意味する。
例えば、ブログアプリでは、2つの異なる動的ページが存在し得る。
-<post-page>というロールを持つ標準の投稿ページ。
-<post-page-id-123>というロールを持つ特定の投稿ページ。
ルータは、<site>/<blog>/<post-id-xxx>という形式の到来するURLを解決する。次のページロール順序付きリストを計算する:{post-page-id-xxx,post-page}。
123以外のIDを持つすべての到来するURLについては、ルータは標準の投稿ページに解決します。しかしながら、<site>/<blog>/<post-id-123>というURLについては、ルータはその123投稿のための特定のページに解決する。
このメカニズムにより、動的ページを解決するためのフォールバック方針を作成している。後でユーザがポストID 321に特定のページを追加することを決定した場合、必要なのは正しいページロールを持つ新しい動的ページを追加することだけであり、ルータはそのページに解決することを把握する。
上で説明したように、システムはページロールを使用して、解決する実際の動的ページを判定する。ページロールにより、アプリはフォールバックを作成できる。つまり、アプリのユーザが特定のコンテンツのために特定の動的ページを作成でき、これが他のコンテンツに使用される標準の動的ページとは異なる場合があることを意味する。
例えば、ブログアプリでは、2つの異なる動的ページが存在し得る。
-<post-page>というロールを持つ標準の投稿ページ。
-<post-page-id-123>というロールを持つ特定の投稿ページ。
ルータは、<site>/<blog>/<post-id-xxx>という形式の到来するURLを解決する。次のページロール順序付きリストを計算する:{post-page-id-xxx,post-page}。
123以外のIDを持つすべての到来するURLについては、ルータは標準の投稿ページに解決します。しかしながら、<site>/<blog>/<post-id-123>というURLについては、ルータはその123投稿のための特定のページに解決する。
このメカニズムにより、動的ページを解決するためのフォールバック方針を作成している。後でユーザがポストID 321に特定のページを追加することを決定した場合、必要なのは正しいページロールを持つ新しい動的ページを追加することだけであり、ルータはそのページに解決することを把握する。
サイトマップエンドポイント
サイトマップは、所与のサイトで公開されているURLのリストである。動的モデルのコンテキストでは、このリストはURLのリストを含み、それぞれについてサイトマップのコンシューマが必要とする情報が追加されている。
サイトマップは2つの異なるシナリオのために働く。
-まず、サイトマップは、サイト内のページのリストをボット要求に公開するという従来の目的に使用される。このシナリオでは、ルータサイトマップエンドポイントは、解決できるURLの完全なリストを計算し、それらを到来するボット要求に返す。
-次に、サイトマップはエディタでも使用できる。このシナリオでは、エディタはサイトマップエンドポイントに要求を発行し、返された結果を使用して、返されたURLのうちの1つをエンドユーザに選択させる。これは、2つの異なるケースで役立つ。
-ユーザが動的ページへのリンクを作成するとき。リンクを作成するには、エディタはリンク先の完全なURLを必要とする。
-ユーザが動的ページをプレビューしたいとき。この場合、正しくレンダリングするために必要なデータをページに提供する仕方を知るために、このページに解決する正確なURLを知る必要がある。
サイトマップは、所与のサイトで公開されているURLのリストである。動的モデルのコンテキストでは、このリストはURLのリストを含み、それぞれについてサイトマップのコンシューマが必要とする情報が追加されている。
サイトマップは2つの異なるシナリオのために働く。
-まず、サイトマップは、サイト内のページのリストをボット要求に公開するという従来の目的に使用される。このシナリオでは、ルータサイトマップエンドポイントは、解決できるURLの完全なリストを計算し、それらを到来するボット要求に返す。
-次に、サイトマップはエディタでも使用できる。このシナリオでは、エディタはサイトマップエンドポイントに要求を発行し、返された結果を使用して、返されたURLのうちの1つをエンドユーザに選択させる。これは、2つの異なるケースで役立つ。
-ユーザが動的ページへのリンクを作成するとき。リンクを作成するには、エディタはリンク先の完全なURLを必要とする。
-ユーザが動的ページをプレビューしたいとき。この場合、正しくレンダリングするために必要なデータをページに提供する仕方を知るために、このページに解決する正確なURLを知る必要がある。
サイトマップを正しく実装する
次の態様を考慮する必要がある。
次の態様を考慮する必要がある。
ユーザクレデンシャルの考慮
URLのリストでは、呼び出しのためのユーザクレデンシャルを考慮する必要がある。ボット(匿名)要求の場合、サイトマップにはパブリックに利用可能なURLのみを含める必要がある。ボットは、匿名ユーザに禁止されているURLを見るべきではない。例えば、<my_app>というプレフィックスのルータを持つアプリがあると仮定する。そのアプリが、<site>/<my_app>/<admin/salaries>の下に従業員の給与を管理するためのページを有する場合、このURLは呼び出し元に返されない。
URLのリストでは、呼び出しのためのユーザクレデンシャルを考慮する必要がある。ボット(匿名)要求の場合、サイトマップにはパブリックに利用可能なURLのみを含める必要がある。ボットは、匿名ユーザに禁止されているURLを見るべきではない。例えば、<my_app>というプレフィックスのルータを持つアプリがあると仮定する。そのアプリが、<site>/<my_app>/<admin/salaries>の下に従業員の給与を管理するためのページを有する場合、このURLは呼び出し元に返されない。
404応答コードを返すことになるURLの考慮
ルータが特定のURLを解決できる可能性はあるが、サイトがそのURLをレンダリングする正しいページロールを持つ動的ページを定義していない可能性がある。これらの場合、ルータは404応答コードに解決される。ボット要求に返す結果から、このようなエントリを除去するのは、ルータのサイトマップエンドポイントの役割である。
ルータが特定のURLを解決できる可能性はあるが、サイトがそのURLをレンダリングする正しいページロールを持つ動的ページを定義していない可能性がある。これらの場合、ルータは404応答コードに解決される。ボット要求に返す結果から、このようなエントリを除去するのは、ルータのサイトマップエンドポイントの役割である。
ルートの考慮
ルータは、特定のサイトで使用されていないルートを潜在的にサポートし得る。例えば、</posts/post-id>や</posts/featured-posts>などのルートをサポートするブログルータを考える。しかしながら、特定のサイトのブログインスタンスでは、ユーザが注目記事機能を使用しないことを決定していることがあり、そのため、どの投稿も注目としてマークせず、注目記事のための動的ページさえも作成していない。
そのような場合、サイトマップはこのURLを返すべきではなく、そうでないと、ボットはそれを探して404応答を取得するか、さらに悪いことには、空の投稿リストを持つ別の動的ページを取得する。
これらの問題を回避する方法は、サイトマップ生成で、サイト内のアプリインスタンスでサポートされるルートを考慮し、サポートされるルートのURLのみを生成することである。
ルータは、特定のサイトで使用されていないルートを潜在的にサポートし得る。例えば、</posts/post-id>や</posts/featured-posts>などのルートをサポートするブログルータを考える。しかしながら、特定のサイトのブログインスタンスでは、ユーザが注目記事機能を使用しないことを決定していることがあり、そのため、どの投稿も注目としてマークせず、注目記事のための動的ページさえも作成していない。
そのような場合、サイトマップはこのURLを返すべきではなく、そうでないと、ボットはそれを探して404応答を取得するか、さらに悪いことには、空の投稿リストを持つ別の動的ページを取得する。
これらの問題を回避する方法は、サイトマップ生成で、サイト内のアプリインスタンスでサポートされるルートを考慮し、サポートされるルートのURLのみを生成することである。
動的ページ上の「ノーインデックス」フラグの考慮
ユーザは、動的ページを「ノーインデックス」としてマークする場合がある。これは、検索ボットによりインデックスされるべきではないことを意味する。サイトマップエンドポイントがURLのリストを計算するとき、各URLが解決するページIDも計算する必要がある。そのページIDが「ノーインデックス」としてマークされている場合、そのURLはリストから除去されるべきである。
ユーザは、動的ページを「ノーインデックス」としてマークする場合がある。これは、検索ボットによりインデックスされるべきではないことを意味する。サイトマップエンドポイントがURLのリストを計算するとき、各URLが解決するページIDも計算する必要がある。そのページIDが「ノーインデックス」としてマークされている場合、そのURLはリストから除去されるべきである。
サイトマップエンドポイント入力
サイトマップを計算するために、エンドポイントは次の入力に依拠する。
-符号付きインスタンス:生成するアプリインスタンスのサイトマップを知るためにエンドポイントによって使用される
-ユーザクレデンシャル:符号付きインスタンスでエンコードされているため、ルータは、ユーザが表示を許可されているURLを含むサイトマップを生成できる。
-「Is_editor」フラグ:これにより、エンドポイントは、エディタの使用に適したサイトマップを生成できる。エディタは、サイトマップをエンドユーザに表示するための情報を必要とするが、これはボットは要求していない。
-ルータ構成:この特定のルータがサイトマップを生成する仕方に関する情報。
-このサイトで使用中のルート:(ルータ構成の一部として)サポートされるルートのリスト。生成されるサイトマップは、この特定のサイトにおいてこのアプリの特定のインスタンスで使用中のルートのみを含むべきである。
-このルータの動的ページおよびそのページロールのリスト:動的ページに実際にマップされるURLのみがサイトマップに含まれるようにするために使用される。どのページにも解決しないURLは、リストから除外する必要がある。
-このルータの動的ページごとの「ノーインデックス」フラグ(ルート構成の一部):「ノーインデックス」とマークされたページに解決されるURLは、ボット用に生成されたサイトマップに表示されるべきではない。しかしながら、要求がエディタから到来する場合は、同じURLを含めるべきであり、なぜならその場合には、解決されたページにインデックスされているか否かは関係ないためである。
サイトマップを計算するために、エンドポイントは次の入力に依拠する。
-符号付きインスタンス:生成するアプリインスタンスのサイトマップを知るためにエンドポイントによって使用される
-ユーザクレデンシャル:符号付きインスタンスでエンコードされているため、ルータは、ユーザが表示を許可されているURLを含むサイトマップを生成できる。
-「Is_editor」フラグ:これにより、エンドポイントは、エディタの使用に適したサイトマップを生成できる。エディタは、サイトマップをエンドユーザに表示するための情報を必要とするが、これはボットは要求していない。
-ルータ構成:この特定のルータがサイトマップを生成する仕方に関する情報。
-このサイトで使用中のルート:(ルータ構成の一部として)サポートされるルートのリスト。生成されるサイトマップは、この特定のサイトにおいてこのアプリの特定のインスタンスで使用中のルートのみを含むべきである。
-このルータの動的ページおよびそのページロールのリスト:動的ページに実際にマップされるURLのみがサイトマップに含まれるようにするために使用される。どのページにも解決しないURLは、リストから除外する必要がある。
-このルータの動的ページごとの「ノーインデックス」フラグ(ルート構成の一部):「ノーインデックス」とマークされたページに解決されるURLは、ボット用に生成されたサイトマップに表示されるべきではない。しかしながら、要求がエディタから到来する場合は、同じURLを含めるべきであり、なぜならその場合には、解決されたページにインデックスされているか否かは関係ないためである。
サイトマップエンドポイント出力
ボット要求の場合、以下が出力されるべきである。
-ボットがスキャンするURLのリスト
-URLごとに、次の(すべてオプションの)パラメータ:
-最終変更日
-変更頻度
-インデックスする優先順位
1つのサイトマップ要求は50,000個を超えるURLを返すべきではないことに留意されたい。この段階では、出願人らは結果のページングをサポートする予定はない。50,000を超えるURLがある場合は、余分なURLを省略されたい。
ボットのためのサイトマッププロトコルの完全な仕様については、こちらを参照されたい。
エディタ要求の場合、以下が出力されるべきである。
-URLのリスト
-URLごとに、次のパラメータ:
-扱いやすいタイトル。エディタで特定の動的ページへのリンクを作成するときに使用され、またエディタのプレビューピッカーボックスにより使用される。
-このURLが解決されるページID。エディタのリンク作成ダイアログにより使用されて、ユーザが特定の動的ページに解決するURLを選択できるようにする。
ボット要求の場合、以下が出力されるべきである。
-ボットがスキャンするURLのリスト
-URLごとに、次の(すべてオプションの)パラメータ:
-最終変更日
-変更頻度
-インデックスする優先順位
1つのサイトマップ要求は50,000個を超えるURLを返すべきではないことに留意されたい。この段階では、出願人らは結果のページングをサポートする予定はない。50,000を超えるURLがある場合は、余分なURLを省略されたい。
ボットのためのサイトマッププロトコルの完全な仕様については、こちらを参照されたい。
エディタ要求の場合、以下が出力されるべきである。
-URLのリスト
-URLごとに、次のパラメータ:
-扱いやすいタイトル。エディタで特定の動的ページへのリンクを作成するときに使用され、またエディタのプレビューピッカーボックスにより使用される。
-このURLが解決されるページID。エディタのリンク作成ダイアログにより使用されて、ユーザが特定の動的ページに解決するURLを選択できるようにする。
注記:プレビューピッカー
ユーザが動的ページをプレビューしようとする場合、エディタはこの動的ページに使用するURLサフィックスを知っている必要がある。プレビューピッカー要素はサイトマップを呼び出し、この動的ページIDに解決されるURLの結果をフィルタリングする。次に、ユーザはリストをブラウズし、その扱いやすいタイトルによりURLを選択する。エディタは、ここで、動的ページをレンダリングするために使用する正しいURLサフィックスを把握している。
ユーザが動的ページをプレビューしようとする場合、エディタはこの動的ページに使用するURLサフィックスを知っている必要がある。プレビューピッカー要素はサイトマップを呼び出し、この動的ページIDに解決されるURLの結果をフィルタリングする。次に、ユーザはリストをブラウズし、その扱いやすいタイトルによりURLを選択する。エディタは、ここで、動的ページをレンダリングするために使用する正しいURLサフィックスを把握している。
注記:リンク作成
ユーザが動的ページへのリンクを作成しようとしていると仮定する。エディタはサイトマップを取得し、このページIDにマップするURLを探す。ユーザは、その扱いやすいタイトルを見てURLをブラウズし、そのうちの1つを選択する。エディタは、ここで、選択したURLのサフィックスを使用して、特定のページIDへの「ルータリンク」を作成する。
ユーザが動的ページへのリンクを作成しようとしていると仮定する。エディタはサイトマップを取得し、このページIDにマップするURLを探す。ユーザは、その扱いやすいタイトルを見てURLをブラウズし、そのうちの1つを選択する。エディタは、ここで、選択したURLのサフィックスを使用して、特定のページIDへの「ルータリンク」を作成する。
動的ルーティングおよびSEOメタタグ
ルータは、URL解決エンドポイントの一部としてメタタグを提供する必要がある。主なものは、「タイトル」、「ノーインデックス」、「説明」、および「画像」を含む。アプリおよびそのルータにとって意味のある方法で、解決されたURLごとにそれらを提供することはルータに委ねられている。つまり、ビューア/エディタインフラストラクチャはメタタグに依存しない。各アプリはiframeを提供して、メタタグの動作を定義で
きる。このiframeは、動的ページのためのページ設定ダイアログの一部としてレンダリングされる。情報は、ルータの構成の一部として保持され、後で正しい応答を生成するために使用され得る。
ルータは、URL解決エンドポイントの一部としてメタタグを提供する必要がある。主なものは、「タイトル」、「ノーインデックス」、「説明」、および「画像」を含む。アプリおよびそのルータにとって意味のある方法で、解決されたURLごとにそれらを提供することはルータに委ねられている。つまり、ビューア/エディタインフラストラクチャはメタタグに依存しない。各アプリはiframeを提供して、メタタグの動作を定義で
きる。このiframeは、動的ページのためのページ設定ダイアログの一部としてレンダリングされる。情報は、ルータの構成の一部として保持され、後で正しい応答を生成するために使用され得る。
HTTPクッキーおよびヘッダ
クッキーは様々なエンドポイントに送信されない。ヘッダに関しては、サポートすることが重要なヘッダの最終リストはまだ未定である。
クッキーは様々なエンドポイントに送信されない。ヘッダに関しては、サポートすることが重要なヘッダの最終リストはまだ未定である。
404ページおよび403ページ
これらのページはビューア/エディタインフラの一部として組み込みサポートを有する。ユーザはそのような特別なページを作成でき、それらが存在する場合は、インフラは適切なHTTP応答コードが受信された場合にそれらにルーティングすることを認識する。
これらのページはビューア/エディタインフラの一部として組み込みサポートを有する。ユーザはそのような特別なページを作成でき、それらが存在する場合は、インフラは適切なHTTP応答コードが受信された場合にそれらにルーティングすることを認識する。
動的ルータを実装する際のクロスドメインの問題
未定
未定
完全な例
未定
未定
データバインディングルータ
ドキュメントのこのパートでは、新しいデータバインディングルータを概説し、このドキュメントの最初のパートで詳述した動的ルーティングインフラの上に構築する仕方について説明する。
ドキュメントのこのパートでは、新しいデータバインディングルータを概説し、このドキュメントの最初のパートで詳述した動的ルーティングインフラの上に構築する仕方について説明する。
データバインディングのコンセプトの簡単な要約
読者がデータバインディングモデルの基本を理解していることを前提としている。
その上で、データバインディングコンポーネントの簡単な概要は次のとおりである。
-コレクション:mongo-DBベースのレコードセット。
-スキーマ:コレクション内のデータのメタモデル。コレクションのスキーマはスキーマファイルに保存される(コレクションごとに1つ)。
-コンテンツマネージャ:ユーザがコレクションのコンテンツを管理できるスプレッドシートのようなアプリケーション。
-Wixデータ:wixコードの一部としてデータアクセスを提供するライブラリ。Wixデータは、ユーザ提供フックの実行、パーミッションの実施、検証の実行などを担当するクライアントインターフェースおよびバックエンドレイヤを有する。
-データセット:ユーザがWixデータAPIを介して提供されるデータにUI要素をバインドできるようにするエディタ/ビューア要素。
-データバインディング:データセットを使用して視覚的コンポーネントをデータにバインドする機能。
-開発DB:エディタが動作するデータベースインスタンス。
-プロダクションDB:ライブサイトが動作するデータベースインスタンス。
読者がデータバインディングモデルの基本を理解していることを前提としている。
その上で、データバインディングコンポーネントの簡単な概要は次のとおりである。
-コレクション:mongo-DBベースのレコードセット。
-スキーマ:コレクション内のデータのメタモデル。コレクションのスキーマはスキーマファイルに保存される(コレクションごとに1つ)。
-コンテンツマネージャ:ユーザがコレクションのコンテンツを管理できるスプレッドシートのようなアプリケーション。
-Wixデータ:wixコードの一部としてデータアクセスを提供するライブラリ。Wixデータは、ユーザ提供フックの実行、パーミッションの実施、検証の実行などを担当するクライアントインターフェースおよびバックエンドレイヤを有する。
-データセット:ユーザがWixデータAPIを介して提供されるデータにUI要素をバインドできるようにするエディタ/ビューア要素。
-データバインディング:データセットを使用して視覚的コンポーネントをデータにバインドする機能。
-開発DB:エディタが動作するデータベースインスタンス。
-プロダクションDB:ライブサイトが動作するデータベースインスタンス。
データバインディングルータ
本データバインディングシステムの提供を完了するために、動的URLと動的ページのレンダリングに必要なデータとの間のギャップを埋めるルータを提供する。
基本的に、データバインディングルータは、到来するURLを解析し、wixデータを使用してクエリに変換する役割を果たす。結果が取得されると、それらは特別なタイプのデータセットに送られ、そしてレンダリングされたページ上の要素にデータが提供される。
このシステムを構成する様々な要素を見ると、正しいクエリを作成すること、クライア
ントにデータを返すこと、および特別なデータセットを使用してデータをページ上のコンポーネントにバインドすることがある。
本データバインディングシステムの提供を完了するために、動的URLと動的ページのレンダリングに必要なデータとの間のギャップを埋めるルータを提供する。
基本的に、データバインディングルータは、到来するURLを解析し、wixデータを使用してクエリに変換する役割を果たす。結果が取得されると、それらは特別なタイプのデータセットに送られ、そしてレンダリングされたページ上の要素にデータが提供される。
このシステムを構成する様々な要素を見ると、正しいクエリを作成すること、クライア
ントにデータを返すこと、および特別なデータセットを使用してデータをページ上のコンポーネントにバインドすることがある。
URLをWixデータクエリに変換する
動物のレコードを有する動物のコレクションがあると仮定する。また、動物ページに/animals/{{animal_name}}のルートを設定すると仮定する。ルータはどのようにして正しいwixデータクエリを生成するのであろうか。
ルータは次を実行する必要がある。
-クエリするコレクションを知る→ルートを定義するときにルータの構成の一部としてコレクション名を保持する。
-クエリするフィールド(複数可)を知る→ルータの構成でマッピングを維持する。この場合、{{animai_name}}を「名前」フィールドにマッピングする。
-正しいクエリ構文を生成する→これはもう少し複雑である。URLの値は常に小文字で、スペースは含まれない。しかしながら、コレクション内の値は通常、人間が読みやすい形式である。例えば、動物名はコレクションでは「Grey Wolf」であるが、URLでは「grey-wolf」である。これを克服するために、ルータは「regex-query」を生成する必要がある-「grey-wolf」のすべての可能な順列のコレクションを検索する:{「Grey Wolf」、「Grey-Wolf」、「grey wolf」など}
動物のレコードを有する動物のコレクションがあると仮定する。また、動物ページに/animals/{{animal_name}}のルートを設定すると仮定する。ルータはどのようにして正しいwixデータクエリを生成するのであろうか。
ルータは次を実行する必要がある。
-クエリするコレクションを知る→ルートを定義するときにルータの構成の一部としてコレクション名を保持する。
-クエリするフィールド(複数可)を知る→ルータの構成でマッピングを維持する。この場合、{{animai_name}}を「名前」フィールドにマッピングする。
-正しいクエリ構文を生成する→これはもう少し複雑である。URLの値は常に小文字で、スペースは含まれない。しかしながら、コレクション内の値は通常、人間が読みやすい形式である。例えば、動物名はコレクションでは「Grey Wolf」であるが、URLでは「grey-wolf」である。これを克服するために、ルータは「regex-query」を生成する必要がある-「grey-wolf」のすべての可能な順列のコレクションを検索する:{「Grey Wolf」、「Grey-Wolf」、「grey wolf」など}
データをクライアントに返す
こちらはより単純である。ルータは、resolve_url()APIごとにペイロードを提供し、そしてそれだけである。
こちらはより単純である。ルータは、resolve_url()APIごとにペイロードを提供し、そしてそれだけである。
データセットを用いて取得したデータをUI要素にバインドする
クライアントサイドでデータを利用可能になっているため、ページ上のUIコンポーネントにプッシュするデータセットが必要である。このデータセットにはいくつかの特別な特性があるため、これをルータデータセットと呼んでいる。このデータセットは次の特別な動作を有する。
-実行時に、データペイロードを期待し、wixデータクエリを単独で発行する代わりに、それで自身を初期化する。
-実行時に、さらにデータを取得する必要がある場合(例えば、グリッドがスクロールされる場合など)、このURLに対してルータによって定義されたフィルタにアクセスする必要がある。したがって、ルータによって作成されたクエリと同様の結果を返すwixデータクエリを生成する方法を知っている。
-編集時には、ユーザがURL要素にバインドされている部分のフィルタをオーバーライドすることはできない。ユーザは、通常のデータセットと同様に、さらなるフィルタを追加したり、並べ替えおよびページサイズを指定したりできることに留意されたい。
-編集時に、ユーザがマスタページに移動することを許可しない(特定のページを暗示するURLにバインドされているため)。
-他のUX関連の動作(例えば、削除される場合の特別な通知、または複製された場合の特別な動作)。
クライアントサイドでデータを利用可能になっているため、ページ上のUIコンポーネントにプッシュするデータセットが必要である。このデータセットにはいくつかの特別な特性があるため、これをルータデータセットと呼んでいる。このデータセットは次の特別な動作を有する。
-実行時に、データペイロードを期待し、wixデータクエリを単独で発行する代わりに、それで自身を初期化する。
-実行時に、さらにデータを取得する必要がある場合(例えば、グリッドがスクロールされる場合など)、このURLに対してルータによって定義されたフィルタにアクセスする必要がある。したがって、ルータによって作成されたクエリと同様の結果を返すwixデータクエリを生成する方法を知っている。
-編集時には、ユーザがURL要素にバインドされている部分のフィルタをオーバーライドすることはできない。ユーザは、通常のデータセットと同様に、さらなるフィルタを追加したり、並べ替えおよびページサイズを指定したりできることに留意されたい。
-編集時に、ユーザがマスタページに移動することを許可しない(特定のページを暗示するURLにバインドされているため)。
-他のUX関連の動作(例えば、削除される場合の特別な通知、または複製された場合の特別な動作)。
URLパターンからリンクを作成する
次に、リンクの生成に注目する。各動物の一意のページへのリンクを有した状態で、グリッド状にすべての動物を表示する非常にシンプルなインデックスページが必要であると仮定する。グリッドで使用されるこれらのリンクをどのように生成するのであろうか。
基本的な考え方は、特定のコレクションのための動的ページに定義された、よく知られたURLパターン、またはルートを使用することである。これらのパターンがわかれば、それらからリンクを生成できる。
例えば、システムに3つの異なるURLパターンがあるとする。
-[main route]\zoo¥animals→動物園内のすべての動物のコレクションページ
-[habitat route]\zoo\animals/{{habitat}}→{{habitat}}に住む動物を示している
-[animal route]/zoo/animais/{{animal_name}}→特定の動物のページ
これらのパターンを定義し、動物コレクションのレコードを与えると、これらのURLを3つすべて作成できる。これを機能させるには、システムのいくつかの新しいコンセプトを含む。
次に、リンクの生成に注目する。各動物の一意のページへのリンクを有した状態で、グリッド状にすべての動物を表示する非常にシンプルなインデックスページが必要であると仮定する。グリッドで使用されるこれらのリンクをどのように生成するのであろうか。
基本的な考え方は、特定のコレクションのための動的ページに定義された、よく知られたURLパターン、またはルートを使用することである。これらのパターンがわかれば、それらからリンクを生成できる。
例えば、システムに3つの異なるURLパターンがあるとする。
-[main route]\zoo¥animals→動物園内のすべての動物のコレクションページ
-[habitat route]\zoo\animals/{{habitat}}→{{habitat}}に住む動物を示している
-[animal route]/zoo/animais/{{animal_name}}→特定の動物のページ
これらのパターンを定義し、動物コレクションのレコードを与えると、これらのURLを3つすべて作成できる。これを機能させるには、システムのいくつかの新しいコンセプトを含む。
スキーマの拡張
スキーマの拡張は、アプリケーションによって提供されるコレクションのスキーマファイル内のセグメントである。この拡張は、通常、既存のスキーマファイルにスキーマ要素を追加する。
この場合、所与のコレクションに対して新しいルートが追加(または変更、または除去)されると、システムは関連するコレクションに対してデータバインディングアプリによって提供されるスキーマ拡張を修正する。ルートごとに、ルートのURLを生成する仕方をシステムに伝える一時的計算フィールド(以下を参照)を作成する。
スキーマの拡張は、アプリケーションによって提供されるコレクションのスキーマファイル内のセグメントである。この拡張は、通常、既存のスキーマファイルにスキーマ要素を追加する。
この場合、所与のコレクションに対して新しいルートが追加(または変更、または除去)されると、システムは関連するコレクションに対してデータバインディングアプリによって提供されるスキーマ拡張を修正する。ルートごとに、ルートのURLを生成する仕方をシステムに伝える一時的計算フィールド(以下を参照)を作成する。
一時的計算フィールド
これらのフィールドは、(a)計算された、(b)一時的なものである。つまり、コレクション内の実際のレコードに保持されることはなく、むしろ、指定された計算ごとにデータ取得時に計算される。これらの計算はすべて、wixデータバックエンドレイヤで行われる。
上記のルートの例では、次の3つのこのようなフィールドを作成する。
-Main_URL:string.Val=“/animals/”
-Habitat_URL:string.Val=“/animals/”+to_url_part(field_val[“habitat”])
-Animal_URL:string.Val=“/animals/”+to_url_part(field_val[“name”])
上記の計算では、計算を実行するwixデータエンジンには不明であるため、URLの<site>パートを指定されていないことに留意されたい。計算を完了し、不足している<site>部分を追加して完全なURLを作成するのはルータに委ねられている。
これらのフィールドは、(a)計算された、(b)一時的なものである。つまり、コレクション内の実際のレコードに保持されることはなく、むしろ、指定された計算ごとにデータ取得時に計算される。これらの計算はすべて、wixデータバックエンドレイヤで行われる。
上記のルートの例では、次の3つのこのようなフィールドを作成する。
-Main_URL:string.Val=“/animals/”
-Habitat_URL:string.Val=“/animals/”+to_url_part(field_val[“habitat”])
-Animal_URL:string.Val=“/animals/”+to_url_part(field_val[“name”])
上記の計算では、計算を実行するwixデータエンジンには不明であるため、URLの<site>パートを指定されていないことに留意されたい。計算を完了し、不足している<site>部分を追加して完全なURLを作成するのはルータに委ねられている。
参照フィールド
将来のバージョンでは、あるコレクションから他のコレクションへの参照フィールドを追加する予定である。このようなフィールドが存在することにより、コレクションAのアイテムからコレクションBのアイテムにリンクするURLを作成できる、つまり、コレクションAにコレクションBへの参照フィールドがあり、そこにコレクションBのアイテムのIDがある場合、コレクションBで定義された一時的リンクフィールドに基づいて、そのIDを使用して正しいURLリンクを生成できる。
しかしながら、現在のバージョンにはない。
将来のバージョンでは、あるコレクションから他のコレクションへの参照フィールドを追加する予定である。このようなフィールドが存在することにより、コレクションAのアイテムからコレクションBのアイテムにリンクするURLを作成できる、つまり、コレクションAにコレクションBへの参照フィールドがあり、そこにコレクションBのアイテムのIDがある場合、コレクションBで定義された一時的リンクフィールドに基づいて、そのIDを使用して正しいURLリンクを生成できる。
しかしながら、現在のバージョンにはない。
データバインディングルータに関する他の考慮事項
ページデータバインディングルータにおけるページロール
少なくともこのシステムのv1では、動的ページごとに複数のロールを使用したり、ユーザにページのカスタムロールを指定させたりする予定はないことに留意されたい。これは、ユーザが「フォールバックページ」またはページロールの一般的な機能ごとにより具体的なページを作成できないことを意味する。
ページデータバインディングルータにおけるページロール
少なくともこのシステムのv1では、動的ページごとに複数のロールを使用したり、ユーザにページのカスタムロールを指定させたりする予定はないことに留意されたい。これは、ユーザが「フォールバックページ」またはページロールの一般的な機能ごとにより具体的なページを作成できないことを意味する。
SEOメタタグを指定する
SEOメタタグは、エディタが提供するページ設定ダイアログインフラにデータバインディングアプリが提供するiframeを介して管理される。そのiframeを介して、ユーザはデータバインディングルータが所有する動的ページごとにSEOメタタグを生成する仕方を指定できる。
この構成は、ルータの構成の一部として保持され、ルータエンドポイントに渡されて、データベースから取得したデータに基づいて正しいメタタグを生成する。
例えば、ユーザは「動物」ページのタイトルに次の表現を指定できる:「動物園の大きな{{name}}に会いに来て!」。ルータは、データを取得するときに正しいタイトルを生成する。
SEOメタタグは、エディタが提供するページ設定ダイアログインフラにデータバインディングアプリが提供するiframeを介して管理される。そのiframeを介して、ユーザはデータバインディングルータが所有する動的ページごとにSEOメタタグを生成する仕方を指定できる。
この構成は、ルータの構成の一部として保持され、ルータエンドポイントに渡されて、データベースから取得したデータに基づいて正しいメタタグを生成する。
例えば、ユーザは「動物」ページのタイトルに次の表現を指定できる:「動物園の大きな{{name}}に会いに来て!」。ルータは、データを取得するときに正しいタイトルを生成する。
サイトマップエンドポイント
サイトマップの実装は比較的単純である。
-コレクションごとに、そのすべてのアイテムを取得する。
-URLルートごとにフィールドを計算しているため、必要な情報は既にある。
-後は、計算されたURLの個別のセットを取得し、呼び出し元に返すだけである。
サイトマップの実装は比較的単純である。
-コレクションごとに、そのすべてのアイテムを取得する。
-URLルートごとにフィールドを計算しているため、必要な情報は既にある。
-後は、計算されたURLの個別のセットを取得し、呼び出し元に返すだけである。
データバインディングルータ上のフック
ルータが機能を実行する前後にユーザコードを実行できるようにする予定である。基本的なメカニズムは、現在のwixデータにあるバックエンドフックに似ている-ユーザは、ルータの実行前または実行後に呼び出される関数を登録できる。
実行前フックは、ルータ自体と同じ入力パラメータを取得し、実際のルータ実装に渡しても渡さなくてもよい。
実行後フックは、ルータの実行から出力パラメータを取得し、HTTP応答の一部として送り返される前にそれらを変更してもよい。
ルータが機能を実行する前後にユーザコードを実行できるようにする予定である。基本的なメカニズムは、現在のwixデータにあるバックエンドフックに似ている-ユーザは、ルータの実行前または実行後に呼び出される関数を登録できる。
実行前フックは、ルータ自体と同じ入力パラメータを取得し、実際のルータ実装に渡しても渡さなくてもよい。
実行後フックは、ルータの実行から出力パラメータを取得し、HTTP応答の一部として送り返される前にそれらを変更してもよい。
未解決の問題
-開発/プロダクションDB
-ページレベルでのパーミッション
-開発/プロダクションDB
-ページレベルでのパーミッション
カスタムルータ
-カスタムルータを作成する
-カスタム動的ページを作成する
-エラーを含む、カスタムルータのためのAPI
-カスタムルータと共にページロールを使用する
-カスタムルータと共にデータバインディングを使用する
-カスタムルータを作成する
-カスタム動的ページを作成する
-エラーを含む、カスタムルータのためのAPI
-カスタムルータと共にページロールを使用する
-カスタムルータと共にデータバインディングを使用する
09-DYP
動的ページ
動的ページ
一般的な説明
動的ページを作成すると、繰り返し使用でき、毎回データベースコレクションからの異なるコンテンツを表示する1つのページレイアウトを設計します。
通常ページには繋がり得るURLが1つしかないが、それとは反対に、動的ページは異なるURLを有することができる。ページに表示されるコンテンツは、そのページへのアクセスに使用されたURLによって異なる。
動的ページは表示されるたびに異なるコンテンツを表示するため、通常のページとは異なります。通常のページはそのコンテンツをページ自体に保存しますが、動的ページのコンテンツはデータベースコレクションに保存されます。
例えば:
レシピサイトがあり、単一のレシピのためのデータを表示するページを設計することを考える。通常の静的ページでは、レシピごとに個別のページを作成する必要がある。動的ページを用いると、1つの動的ページのみを作成し、実行時に表示されるべき特定のレシピを判定し得るURLパターンを割り当てるだけでよい。
(Wixデータコレクションに保存されている)レシピのそれぞれが「title」という名前のフィールドを含む場合、動的ページのURLを「www..../recipes/{title}」となるように定義できる。
ユーザが「www.../recipes/pizza」をブラウズすると、ページは「pizza」などのタイトルのレシピのためのコンテンツを表示する。
動的ページ
動的ページ
一般的な説明
動的ページを作成すると、繰り返し使用でき、毎回データベースコレクションからの異なるコンテンツを表示する1つのページレイアウトを設計します。
通常ページには繋がり得るURLが1つしかないが、それとは反対に、動的ページは異なるURLを有することができる。ページに表示されるコンテンツは、そのページへのアクセスに使用されたURLによって異なる。
動的ページは表示されるたびに異なるコンテンツを表示するため、通常のページとは異なります。通常のページはそのコンテンツをページ自体に保存しますが、動的ページのコンテンツはデータベースコレクションに保存されます。
例えば:
レシピサイトがあり、単一のレシピのためのデータを表示するページを設計することを考える。通常の静的ページでは、レシピごとに個別のページを作成する必要がある。動的ページを用いると、1つの動的ページのみを作成し、実行時に表示されるべき特定のレシピを判定し得るURLパターンを割り当てるだけでよい。
(Wixデータコレクションに保存されている)レシピのそれぞれが「title」という名前のフィールドを含む場合、動的ページのURLを「www..../recipes/{title}」となるように定義できる。
ユーザが「www.../recipes/pizza」をブラウズすると、ページは「pizza」などのタイトルのレシピのためのコンテンツを表示する。
主なコンポーネント/関連するWixコード要素
コンテンツマネージャ(およびWixデータデータベース)
ユーザがコレクションを作成してデータを管理するために使用する。
コンテンツマネージャ(およびWixデータデータベース)
ユーザがコレクションを作成してデータを管理するために使用する。
データバインディングエディタアプリケーション
ユーザが動的ページを作成および管理し、またページコンポーネントを関連するコンテンツパーツに接続できるようにするパネルにより、Wixエディタを強化する。
ユーザが動的ページを作成および管理し、またページコンポーネントを関連するコンテンツパーツに接続できるようにするパネルにより、Wixエディタを強化する。
データバインディングルータ
2種類の要求を受け入れるバックエンドアプリケーション:
1. ルーティング要求。データバインディングアプリケーションに属する動的ページをロードする場合に、wixビューアは所与の入力されたURLに対して表示するページおよびコンテンツをルータに要求する。ルータは、所与のURLをサイト所有者によって定義されたパターンと照合することを試み、データベース内の関連コンテンツを探す。見つかった場合、ルータは関連するページの識別子およびコンテンツで応答する。
2. サイトマップ要求。ボットがWixサイトのサイトマップを要求し、サイトにデータバインディングアプリケーションに属する動的ページが含まれる場合、ルータは解決し得るすべての可能なURLのリストを返すように要求される。
2種類の要求を受け入れるバックエンドアプリケーション:
1. ルーティング要求。データバインディングアプリケーションに属する動的ページをロードする場合に、wixビューアは所与の入力されたURLに対して表示するページおよびコンテンツをルータに要求する。ルータは、所与のURLをサイト所有者によって定義されたパターンと照合することを試み、データベース内の関連コンテンツを探す。見つかった場合、ルータは関連するページの識別子およびコンテンツで応答する。
2. サイトマップ要求。ボットがWixサイトのサイトマップを要求し、サイトにデータバインディングアプリケーションに属する動的ページが含まれる場合、ルータは解決し得るすべての可能なURLのリストを返すように要求される。
データバインディングビューアアプリケーション
動的ページがロードされたときに実行される。ルータから返されたコンテンツを受信し、構成に従ってページ上のコンポーネントにバインドする。
動的ページがロードされたときに実行される。ルータから返されたコンテンツを受信し、構成に従ってページ上のコンポーネントにバインドする。
技術的情報
コード全体はJavaScriptで記述される。
react、redux、lodash、coなど、コードと共に出荷される様々なオープンソースライブラリを使用している。
他のオープンソースライブラリは、コードの構築およびテストに使用されるが、同梱されていない:webpack、babel、mocha、eslintなど。
コード全体はJavaScriptで記述される。
react、redux、lodash、coなど、コードと共に出荷される様々なオープンソースライブラリを使用している。
他のオープンソースライブラリは、コードの構築およびテストに使用されるが、同梱されていない:webpack、babel、mocha、eslintなど。
サードパーティサービス
Sentry
コードは、Sentry(https://sentry.io)と呼ばれるサードパーティのサービスを使用して、実行時(エディタ時間およびビューア時間の両方)に発生する問題のあるフローのログを取る。
エラーが発生するたびに、コードはエラーに関する情報と現在のコンテキストとをSentryに送信する。この情報には次のようなものが含まれる。
-アプリケーションバージョン
-エディタ構成
-エラーの説明
-サイト/エディタURL
-リファラURL
-ユーザエージェント(ブラウザタイプ、バージョンなど)
-オペレーティングシステム
-ユーザのデータベースのコンテンツ
-IDEにおいてユーザにより記述されたコード
-エラーにつながったユーザアクション
Sentry
コードは、Sentry(https://sentry.io)と呼ばれるサードパーティのサービスを使用して、実行時(エディタ時間およびビューア時間の両方)に発生する問題のあるフローのログを取る。
エラーが発生するたびに、コードはエラーに関する情報と現在のコンテキストとをSentryに送信する。この情報には次のようなものが含まれる。
-アプリケーションバージョン
-エディタ構成
-エラーの説明
-サイト/エディタURL
-リファラURL
-ユーザエージェント(ブラウザタイプ、バージョンなど)
-オペレーティングシステム
-ユーザのデータベースのコンテンツ
-IDEにおいてユーザにより記述されたコード
-エラーにつながったユーザアクション
10-DBG
データバインディング
データセットおよびデータバインディング
データバインディングシステムのコア要素はデータセットである。データセットはデータのクライアントサイドプロバイダであり、視覚的コンストラクト(すなわち、エディタコンポーネント)は双方向にバインドできる。データセットはまた、クライアントアプリケーションが、バックエンドロジックレイヤ、また最終的にはデータストア自体によりデータ取得およびデータ変換プロトコルを実装することにより、データを管理するチャネルでもある。
最も単純なタイプのデータセットは、コレクションデータセットである。このようなデータセットは、単純に、特定のコレクションからデータを取得し、基礎となるモデルのフィールドメタデータに基づいて並べ替えおよびフィルタリングを可能にし、そのコンシューマがレコードを反復処理し、場合により、新しいレコードを作成し、既存のレコードを更新できるようにする。データセットは、クエリベースのデータセットである。このようなデータセットは、単一のコレクションに対するクエリによって駆動される。
エディタ要素はデータセットにバインドされ得る。特に、エディタ要素のプロパティは、データセットのコレクションフィールド表現にバインドされる。複数の要素が同じデータセットにバインドされ得る。
実行時には、次の(簡略化された)シナリオが実行される。
-ページがロードされる
-ページコードが実行される。その一部として、1つまたは複数のデータセットが作成される(ページへのデータセットのアタッチの仕方については後述)。
-データセットは、ここで、UIコンストラクトに自身を繋ぐ。これは次のように行われる。
-このデータセットにバインドされているページコンポーネントを見つける。
-それぞれについて、データセットとコンポーネントとの間のやり取りを促進するマッチングアダプタを作成する。
-アダプタは、そのコンポーネントからの変更イベントのリスナとして自身を登録するため、変更を中継してデータセットに返すことができる。
-ここで、データ取得機能を実行することによりデータセットにデータが入力される。
-初期データが利用可能になると、関連するアダプタを使用することにより、データが関連するデータバインドコントロールに設定される。
-ここで、データセットの状態は、多くのイベントのうちの1つに対する反応として変化する場合がある。
-「次のレコード」、「前のレコード」などの呼び出し
-「次のページ」、「前のページ」などの呼び出し
-ユーザ入力による現在のレコードへの変更
-他。
-データセットの状態に対するこのような変更のたびに、アダプタを介してすべてのバインドされたコンポーネントに対して更新コマンドを出す
-また、データセットは、要求されたときに変更をバックエンドストアに「コミット」
する場合がある。これは、「現在のレコード」ポインタが新しいレコードに移動したときに自動的に発生するか、「変更のコミット」API呼び出しによって明示的に発生する。これについては後で詳述する。
データセットの状態
データバインディング
データセットおよびデータバインディング
データバインディングシステムのコア要素はデータセットである。データセットはデータのクライアントサイドプロバイダであり、視覚的コンストラクト(すなわち、エディタコンポーネント)は双方向にバインドできる。データセットはまた、クライアントアプリケーションが、バックエンドロジックレイヤ、また最終的にはデータストア自体によりデータ取得およびデータ変換プロトコルを実装することにより、データを管理するチャネルでもある。
最も単純なタイプのデータセットは、コレクションデータセットである。このようなデータセットは、単純に、特定のコレクションからデータを取得し、基礎となるモデルのフィールドメタデータに基づいて並べ替えおよびフィルタリングを可能にし、そのコンシューマがレコードを反復処理し、場合により、新しいレコードを作成し、既存のレコードを更新できるようにする。データセットは、クエリベースのデータセットである。このようなデータセットは、単一のコレクションに対するクエリによって駆動される。
エディタ要素はデータセットにバインドされ得る。特に、エディタ要素のプロパティは、データセットのコレクションフィールド表現にバインドされる。複数の要素が同じデータセットにバインドされ得る。
実行時には、次の(簡略化された)シナリオが実行される。
-ページがロードされる
-ページコードが実行される。その一部として、1つまたは複数のデータセットが作成される(ページへのデータセットのアタッチの仕方については後述)。
-データセットは、ここで、UIコンストラクトに自身を繋ぐ。これは次のように行われる。
-このデータセットにバインドされているページコンポーネントを見つける。
-それぞれについて、データセットとコンポーネントとの間のやり取りを促進するマッチングアダプタを作成する。
-アダプタは、そのコンポーネントからの変更イベントのリスナとして自身を登録するため、変更を中継してデータセットに返すことができる。
-ここで、データ取得機能を実行することによりデータセットにデータが入力される。
-初期データが利用可能になると、関連するアダプタを使用することにより、データが関連するデータバインドコントロールに設定される。
-ここで、データセットの状態は、多くのイベントのうちの1つに対する反応として変化する場合がある。
-「次のレコード」、「前のレコード」などの呼び出し
-「次のページ」、「前のページ」などの呼び出し
-ユーザ入力による現在のレコードへの変更
-他。
-データセットの状態に対するこのような変更のたびに、アダプタを介してすべてのバインドされたコンポーネントに対して更新コマンドを出す
-また、データセットは、要求されたときに変更をバックエンドストアに「コミット」
する場合がある。これは、「現在のレコード」ポインタが新しいレコードに移動したときに自動的に発生するか、「変更のコミット」API呼び出しによって明示的に発生する。これについては後で詳述する。
データセットの状態
11-CMGR
コンテンツマネージャ
コンテンツマネージャ(CMGR)
CMGRは、ユーザがWixデータコレクションに格納されているデータを操作できるようにするExcelに似たデータ管理アプリケーションである。アプリケーションは、2つの主要な部分、すなわちWixサイトのそれぞれの部分に置かれるCMGRエディタアプリケーションおよびCMGRマイアカウントアプリケーションから構成される。
コンテンツマネージャ
コンテンツマネージャ(CMGR)
CMGRは、ユーザがWixデータコレクションに格納されているデータを操作できるようにするExcelに似たデータ管理アプリケーションである。アプリケーションは、2つの主要な部分、すなわちWixサイトのそれぞれの部分に置かれるCMGRエディタアプリケーションおよびCMGRマイアカウントアプリケーションから構成される。
エディタにおけるコンテンツマネージャ(CMGRエディタ)
CMGRエディタはクライアントサイドウェブワーカーにより開かれる。これは、エディタAPIとCMGRとの間のメディエータであるエディタSDKを取得し、CMGRがWixサイトの状態を操作できるようにする。CMGRエディタは次を可能にする。
-サイトのテスト/サンドボックスデータの表示および編集(WixデータAPIを使用)
-コレクションのパーミッションを編集する(エディタSDKを使用してクラウドVFSのファイルを修正する)
-Wixデータフックの表示および編集(編集はSanta Editorの外部パネルで行われ、修正はクラウドVFSに格納される)
-コレクションデータをサンドボックスからライブに、またはその逆に同期する(WixデータAPIを使用)
-ライブデータをプレビューする(WixデータAPIを使用)
-スキーマの管理:新しいスキーマの作成、フィールドの追加/編集/除去(エディタSDKを使用してクラウドVFSのファイルを修正する)
CMGRエディタはクライアントサイドウェブワーカーにより開かれる。これは、エディタAPIとCMGRとの間のメディエータであるエディタSDKを取得し、CMGRがWixサイトの状態を操作できるようにする。CMGRエディタは次を可能にする。
-サイトのテスト/サンドボックスデータの表示および編集(WixデータAPIを使用)
-コレクションのパーミッションを編集する(エディタSDKを使用してクラウドVFSのファイルを修正する)
-Wixデータフックの表示および編集(編集はSanta Editorの外部パネルで行われ、修正はクラウドVFSに格納される)
-コレクションデータをサンドボックスからライブに、またはその逆に同期する(WixデータAPIを使用)
-ライブデータをプレビューする(WixデータAPIを使用)
-スキーマの管理:新しいスキーマの作成、フィールドの追加/編集/除去(エディタSDKを使用してクラウドVFSのファイルを修正する)
マイアカウントのコンテンツマネージャ(CMGRマイアカウント)
CMGRマイアカウントはWixダッシュボードによって開かれる。CMGRマイアカウントは次を可能にする。
-サイトのライブデータの表示および編集(WixデータAPIを使用)
-スキーマに保持されないデータに一時的(未定義)フィールドを追加する
CMGRマイアカウントはWixダッシュボードによって開かれる。CMGRマイアカウントは次を可能にする。
-サイトのライブデータの表示および編集(WixデータAPIを使用)
-スキーマに保持されないデータに一時的(未定義)フィールドを追加する
コンテンツマネージャグリッド
CMGRエディタおよびCMGRマイアカウントの両方におけるプライマリコンポーネントである。コレクションのスキーマを使用して、グリッドの列を構築する。スキーマは、特定のWixサイトに関連付けられたWixコードファイルシステムに格納される。W
ixデータからロードされたユーザデータを使用して、グリッドの行を構築する。これは次のことを可能にする。
-コレクションアイテム(行)の管理:追加、編集、除去、複製(WixデータAPIを使用)
-フィールドの可視性を切り替える
-データのフィルタ(WixデータAPIを使用)
-データの並べ替え(WixデータAPIを使用)
CMGRエディタおよびCMGRマイアカウントの両方におけるプライマリコンポーネントである。コレクションのスキーマを使用して、グリッドの列を構築する。スキーマは、特定のWixサイトに関連付けられたWixコードファイルシステムに格納される。W
ixデータからロードされたユーザデータを使用して、グリッドの行を構築する。これは次のことを可能にする。
-コレクションアイテム(行)の管理:追加、編集、除去、複製(WixデータAPIを使用)
-フィールドの可視性を切り替える
-データのフィルタ(WixデータAPIを使用)
-データの並べ替え(WixデータAPIを使用)
データ型
CMGRは、文字列、数値、ブーリアン、日付、ページリンク、画像、JavaScript配列およびオブジェクト、参照などの複数のデータ型を処理する。
文字列、数値、ブーリアン、日付、配列、およびオブジェクトはプリミティブ型である(JavaScriptでネイティブにサポートされている)。
ページリンクは、コレクションに格納されない特別な文字列であり、動的ページのパターンを指定すると、実行時にwixデータによって構築される。ページリンクは、Wixサイトにおいて動的ページにリンクするために使用され得る。
画像は、外部リソースへの文字列か、Wixメディアサーバに格納されているファイルを参照する特別なWixメディア文字列である。ユーザは、Wixメディアダイアログを介して画像をアップロードできる。
参照は、Wixデータコレクション間の結合を有効にするために使用される他のコレクションへのポインタである。
CMGRは、文字列、数値、ブーリアン、日付、ページリンク、画像、JavaScript配列およびオブジェクト、参照などの複数のデータ型を処理する。
文字列、数値、ブーリアン、日付、配列、およびオブジェクトはプリミティブ型である(JavaScriptでネイティブにサポートされている)。
ページリンクは、コレクションに格納されない特別な文字列であり、動的ページのパターンを指定すると、実行時にwixデータによって構築される。ページリンクは、Wixサイトにおいて動的ページにリンクするために使用され得る。
画像は、外部リソースへの文字列か、Wixメディアサーバに格納されているファイルを参照する特別なWixメディア文字列である。ユーザは、Wixメディアダイアログを介して画像をアップロードできる。
参照は、Wixデータコレクション間の結合を有効にするために使用される他のコレクションへのポインタである。
実装
アプリケーションは、Reactというオープンソースフレームワークによってレンダリングされる。
https://github.com/facebook/react
アプリケーションの状態は、reduxというオープンソースライブラリで処理される。https://github.com/reactis/redux
グリッドは、次の3つのコンポーネントから構成されるag-gridというオープンソースライブラリによってレンダリングされる。
1.ag-grid(https://github.com/ceolter/ag-grid)
2.ag-grid-enterprise(https://github.com/ceolter/ag-grid-enterprise)
3.ag-grid-react(https://github.com/ceolter/ag-grid-react)
アプリケーションは、Reactというオープンソースフレームワークによってレンダリングされる。
https://github.com/facebook/react
アプリケーションの状態は、reduxというオープンソースライブラリで処理される。https://github.com/reactis/redux
グリッドは、次の3つのコンポーネントから構成されるag-gridというオープンソースライブラリによってレンダリングされる。
1.ag-grid(https://github.com/ceolter/ag-grid)
2.ag-grid-enterprise(https://github.com/ceolter/ag-grid-enterprise)
3.ag-grid-react(https://github.com/ceolter/ag-grid-react)
12-DSEO
動的SEO
Wixコード-SEOサブシステムの説明
Wixサイトの「通常の」SEOレンダラは、サイトを表す静的JSONデータを取得し、それを使用して検索ボット向けにサイトの簡易バージョンをレンダリングする(クライアントサイドで実装される通常のレンダリングロジックを使用せずに)。
Wixコードはユーザがサイトを動的に変更する機能を導入するため、これらの変更を含む方法でサイトをレンダリングできる異なる/追加のメカニズムが必要とされており、これは、動的ページルーティングおよび任意のユーザロジックを含み得る。
動的SEO
Wixコード-SEOサブシステムの説明
Wixサイトの「通常の」SEOレンダラは、サイトを表す静的JSONデータを取得し、それを使用して検索ボット向けにサイトの簡易バージョンをレンダリングする(クライアントサイドで実装される通常のレンダリングロジックを使用せずに)。
Wixコードはユーザがサイトを動的に変更する機能を導入するため、これらの変更を含む方法でサイトをレンダリングできる異なる/追加のメカニズムが必要とされており、これは、動的ページルーティングおよび任意のユーザロジックを含み得る。
SEOサブシステムの主要なサブコンポーネント
・Wix SEOレンダラからRPC要求を受信し、処理のために利用可能なワーカーにディスパッチするディスパッチャサービス(「クラウドSEOディスパッチャ」)
・レンダリング要求を処理する「クラウドSEOワーカー」のグリッド。
各ワーカーは、(実行中のユーザコードなどを含む)実際の処理を行うクライアントコード(別名「Mini Santa」)の実行に使用されるヘッドレスChromeブラウザを実行し、
サイトを表す静的データ構造に適用する一連の変更として結果を生成する。
・利用可能なワーカーを追跡し、構成の変更と同期させる管理サービス(「クラウドSEOライフサイクル」)。
・Wix SEOレンダラからRPC要求を受信し、処理のために利用可能なワーカーにディスパッチするディスパッチャサービス(「クラウドSEOディスパッチャ」)
・レンダリング要求を処理する「クラウドSEOワーカー」のグリッド。
各ワーカーは、(実行中のユーザコードなどを含む)実際の処理を行うクライアントコード(別名「Mini Santa」)の実行に使用されるヘッドレスChromeブラウザを実行し、
サイトを表す静的データ構造に適用する一連の変更として結果を生成する。
・利用可能なワーカーを追跡し、構成の変更と同期させる管理サービス(「クラウドSEOライフサイクル」)。
レンダリングフロー
通常のSEOレンダラは、サイトがWixコード対応であることを認識すると、レンダリングに関連するデータを使用して「クラウドSEOディスパッチャ」を呼び出し、次を応答として期待する。
・サイトのJSONに適用する差分(masterPage+現在のページ)
・動的ページルーティングの場合、レンダリングするページのpageID+レンダリングするSEOメタデータ
「クラウドSEOディスパッチャ」は、レンダリングタスクを利用可能な「クラウドSEOワーカー」のうちの1つに渡す。
ワーカーは、管理されているヘッドレスChromeインスタンスに、レンダリングするサイトのパラメータによりMini Santaのレンダリング関数を呼び出すことにより、サイトをレンダリングするように指示する。
レンダリング関数は、サイトをレンダリングするコードを実行するが、画面に結果を表示する代わりに、次を計算して出力する。
1. 静的サイトの初期データ構造とユーザコードの実行後のランタイムデータ構造との差分。
2. 動的ページ情報。レンダリングするページと、レンダリング結果に追加するSEOメタデータ。
これらの結果の差分は、Wixの「通常の」SEOレンダラまでの呼び出しのチェーンに戻り、これにより最初の静的データに適用され、検索エンジンクローラに送り返される最終HTMLをレンダリングする。
通常のSEOレンダラは、サイトがWixコード対応であることを認識すると、レンダリングに関連するデータを使用して「クラウドSEOディスパッチャ」を呼び出し、次を応答として期待する。
・サイトのJSONに適用する差分(masterPage+現在のページ)
・動的ページルーティングの場合、レンダリングするページのpageID+レンダリングするSEOメタデータ
「クラウドSEOディスパッチャ」は、レンダリングタスクを利用可能な「クラウドSEOワーカー」のうちの1つに渡す。
ワーカーは、管理されているヘッドレスChromeインスタンスに、レンダリングするサイトのパラメータによりMini Santaのレンダリング関数を呼び出すことにより、サイトをレンダリングするように指示する。
レンダリング関数は、サイトをレンダリングするコードを実行するが、画面に結果を表示する代わりに、次を計算して出力する。
1. 静的サイトの初期データ構造とユーザコードの実行後のランタイムデータ構造との差分。
2. 動的ページ情報。レンダリングするページと、レンダリング結果に追加するSEOメタデータ。
これらの結果の差分は、Wixの「通常の」SEOレンダラまでの呼び出しのチェーンに戻り、これにより最初の静的データに適用され、検索エンジンクローラに送り返される最終HTMLをレンダリングする。
13A-CFN
計算関数
Wixコード-計算関数
要約
Wixサイトの場合、ユーザは、標準のHTTPプロトコルを介してサイトのウェブインターフェースとして公開される関数を記述する機能を有し得る。
この機能は、例えば、ウェブフックを介したサードパーティアプリケーションへの登録や、ウェブサイトのREST APIの公開など、サーバ間の組み込みに役立つ。
計算関数
Wixコード-計算関数
要約
Wixサイトの場合、ユーザは、標準のHTTPプロトコルを介してサイトのウェブインターフェースとして公開される関数を記述する機能を有し得る。
この機能は、例えば、ウェブフックを介したサードパーティアプリケーションへの登録や、ウェブサイトのREST APIの公開など、サーバ間の組み込みに役立つ。
関数の追加
WixコードIDEを介して、ユーザは計算関数を追加する機能を有することができ、この機能は、コードを記述するための専用ページを開く。関数の名前は、ウェブサイトアドレスに関連するウェブパスプレフィックスを表し、これにより、HTTPプロトコルを使用して関数を呼び出すことができる。
例えば、computeという名前の関数は、http[s]://mysite.com/_api/endpoints/compute/...というURLを介してアクセスできる。
ユーザはまた、場合により、関数を使用できるHTTPメソッド(GET/POST/PUT/DELETE)を定義することもできる。コードは、ユーザのサイト専用スペースの下にあるVFSと呼ばれるマルチテナントサービスに格納される。
ユーザは、URL、クエリパラメータ、ヘッダ、ペイロード、HTTPメソッドなど、処理に使用できるHTTP要求情報を取得する。
ユーザは、ステータスコード、ペイロード、ヘッダの部分でHTTP応答を生成できる。
WixコードIDEを介して、ユーザは計算関数を追加する機能を有することができ、この機能は、コードを記述するための専用ページを開く。関数の名前は、ウェブサイトアドレスに関連するウェブパスプレフィックスを表し、これにより、HTTPプロトコルを使用して関数を呼び出すことができる。
例えば、computeという名前の関数は、http[s]://mysite.com/_api/endpoints/compute/...というURLを介してアクセスできる。
ユーザはまた、場合により、関数を使用できるHTTPメソッド(GET/POST/PUT/DELETE)を定義することもできる。コードは、ユーザのサイト専用スペースの下にあるVFSと呼ばれるマルチテナントサービスに格納される。
ユーザは、URL、クエリパラメータ、ヘッダ、ペイロード、HTTPメソッドなど、処理に使用できるHTTP要求情報を取得する。
ユーザは、ステータスコード、ペイロード、ヘッダの部分でHTTP応答を生成できる。
関数の実行
関数がHTTPアクセスに利用可能になり、Wixコードウェブサーバ(ディスパッチャ)に対してHTTP要求が呼び出された後、関数定義の存在をテストするために最初の検証が実行される。関数が存在しない場合、ステータス404(見つかりません)が返される。関数が存在する場合、コードは、そこで実行されている基本アプリケーションサーバ(ELM)を介して、分離されたドッカーコンテナで実行される。
関数がHTTPアクセスに利用可能になり、Wixコードウェブサーバ(ディスパッチャ)に対してHTTP要求が呼び出された後、関数定義の存在をテストするために最初の検証が実行される。関数が存在しない場合、ステータス404(見つかりません)が返される。関数が存在する場合、コードは、そこで実行されている基本アプリケーションサーバ(ELM)を介して、分離されたドッカーコンテナで実行される。
公開前のテストおよびデバッグ
計算関数の開発段階で、WixコードIDEを介して提供されるテストHTTP URLを介して関数をテストできる。既に公開されているか、現在開発中の関数実行のログを表示することもできる。
計算関数の開発段階で、WixコードIDEを介して提供されるテストHTTP URLを介して関数をテストできる。既に公開されているか、現在開発中の関数実行のログを表示することもできる。
13B-CFN
計算関数-詳細
Wixコード-計算関数
概要
このドキュメントでは、HTTPを介してAPIとしてウェブエンドポイントを公開するための機能要件および技術仕様の提案を概説する。
この文書は研究論文に基づいている。
計算関数-詳細
Wixコード-計算関数
概要
このドキュメントでは、HTTPを介してAPIとしてウェブエンドポイントを公開するための機能要件および技術仕様の提案を概説する。
この文書は研究論文に基づいている。
機能要件
認証なしでのウェブアクセスのためのメソッドを公開する機能
・サポートされているHTTPメソッドを定義する機能:POST、GET、PUT、DELETE(同じパス上)
・要求のHTTPメソッド、パス、ヘッダ、クエリパラメータ、およびボディを抽出(読み取り)する機能
・応答のHTTPステータスコード、ヘッダを書き込む機能
○要求のHTTPアクセプトヘッダを定義する機能があると好都合である
○応答のHTTPコンテンツタイプヘッダを定義する機能があると好都合である
・データへの不正アクセスは、データレイヤにより処理(実施)されるべきである
認証なしでのウェブアクセスのためのメソッドを公開する機能
・サポートされているHTTPメソッドを定義する機能:POST、GET、PUT、DELETE(同じパス上)
・要求のHTTPメソッド、パス、ヘッダ、クエリパラメータ、およびボディを抽出(読み取り)する機能
・応答のHTTPステータスコード、ヘッダを書き込む機能
○要求のHTTPアクセプトヘッダを定義する機能があると好都合である
○応答のHTTPコンテンツタイプヘッダを定義する機能があると好都合である
・データへの不正アクセスは、データレイヤにより処理(実施)されるべきである
ウェブ API HTTP仕様
メソッドがウェブアクセスのために公開されると、メソッドは次の仕様で公開される。
メソッドがウェブアクセスのために公開されると、メソッドは次の仕様で公開される。
URI
無料サイト
公開サイト:https://{user name}wixsite.com/_api/endpoints/{site name}/*
開発:https://{user name}wixsite.com/_api-dev/endpoints/{site name}/*
プレミアムサイト
公開サイト:https://{user domain}/_api/endpoints/*
開発:https://{user domain}/_api-dev/endpoints/*
サイトルートへの/_api/endpomts/(および/_api-dev/endpoints/)という相対パスは、ユーザ定義API全体へのルートエントリポイントになる。このエントリポイントをAPIルートとして呼び出す。
ユーザの視点からは、このURLは永続的なものになる。URLが変更されるユースケースは次のとおりである。
・無料サイトにおいて-ユーザがサイト名を変更
・プレミアムサイトにおいて-ユーザがドメインを変更
・ユーザがAPIルートの後の内部サブパスを変更したとき。
・サイト移転-ドメイン名が変更され得る
・プレミアムへのアップグレード-ドメインの購入/既存のドメインの割り当て
全対全-APIの後方互換性はもっぱらユーザの役割のようである。
無料サイト
公開サイト:https://{user name}wixsite.com/_api/endpoints/{site name}/*
開発:https://{user name}wixsite.com/_api-dev/endpoints/{site name}/*
プレミアムサイト
公開サイト:https://{user domain}/_api/endpoints/*
開発:https://{user domain}/_api-dev/endpoints/*
サイトルートへの/_api/endpomts/(および/_api-dev/endpoints/)という相対パスは、ユーザ定義API全体へのルートエントリポイントになる。このエントリポイントをAPIルートとして呼び出す。
ユーザの視点からは、このURLは永続的なものになる。URLが変更されるユースケースは次のとおりである。
・無料サイトにおいて-ユーザがサイト名を変更
・プレミアムサイトにおいて-ユーザがドメインを変更
・ユーザがAPIルートの後の内部サブパスを変更したとき。
・サイト移転-ドメイン名が変更され得る
・プレミアムへのアップグレード-ドメインの購入/既存のドメインの割り当て
全対全-APIの後方互換性はもっぱらユーザの役割のようである。
安全性
URLは、ユーザのサイトと同じドメインにある。これらのURLにブラウザを介してアクセスし、ユーザが意図しない安全でないコードを記述すると、潜在的なセキュリティリスクが発生する可能性がある。
以下を使用して、CSRFおよびXSS攻撃に対処できる。
・CSRF-ブラウザユーザエージェントにクッキー/ヘッダ検証を使用する
・XSS-オプトアウトまたはホワイトリストを定義するオプションを備えた状態で、デフォルトでユーザのドメインにコンテンツセキュリティポリシー機能を使用する
SSLを使用すると、セキュリティをさらに向上させることができる。
URLは、ユーザのサイトと同じドメインにある。これらのURLにブラウザを介してアクセスし、ユーザが意図しない安全でないコードを記述すると、潜在的なセキュリティリスクが発生する可能性がある。
以下を使用して、CSRFおよびXSS攻撃に対処できる。
・CSRF-ブラウザユーザエージェントにクッキー/ヘッダ検証を使用する
・XSS-オプトアウトまたはホワイトリストを定義するオプションを備えた状態で、デフォルトでユーザのドメインにコンテンツセキュリティポリシー機能を使用する
SSLを使用すると、セキュリティをさらに向上させることができる。
要求
・許可されるHTTPメソッド:エンドポイントの定義による
・関数のコードは、要求のボディ、ヘッダ、クエリパラメータ、IPを抽出する役割を果たす。
・許可されるHTTPメソッド:エンドポイントの定義による
・関数のコードは、要求のボディ、ヘッダ、クエリパラメータ、IPを抽出する役割を果たす。
応答
・応答のステータスコード:エンドポイントのコードの役割
・適切な形式で応答のボディを提供するのはエンドポイントのコードの役割である
・応答ヘッダも提供することができる
・応答のステータスコード:エンドポイントのコードの役割
・適切な形式で応答のボディを提供するのはエンドポイントのコードの役割である
・応答ヘッダも提供することができる
Wixコード設計
はじめに
一般的な方向性は、パブリックサイトスクリプトで使用されるウェブモジュールを、HTTPコンシューマ向けにウェブを介してパブリックに公開されるメソッドの定義と区別することである。後者を計算関数と呼ぶことにする。共有コードをパブリックスクリプトから使用する必要がある場合、より簡素な設計および実装が可能になると同時に、その結果のデフォルトの形式は、そのままウェブ計算関数の公開に使用することはできず、なんらかの操作が必要となる。
また、サイトのプレゼンテーションレイヤ(パブリックスクリプト)とはまったく関係のないウェブ計算関数を定義することもできる。
例えば、githubウェブフックをリッスンするウェブ計算関数は、データを解析し、データベースコレクションに情報を保存し、同じコレクションからのデータを提示する動的ページがある。ここにはパブリックサイトのスクリプトは含まれていない。
はじめに
一般的な方向性は、パブリックサイトスクリプトで使用されるウェブモジュールを、HTTPコンシューマ向けにウェブを介してパブリックに公開されるメソッドの定義と区別することである。後者を計算関数と呼ぶことにする。共有コードをパブリックスクリプトから使用する必要がある場合、より簡素な設計および実装が可能になると同時に、その結果のデフォルトの形式は、そのままウェブ計算関数の公開に使用することはできず、なんらかの操作が必要となる。
また、サイトのプレゼンテーションレイヤ(パブリックスクリプト)とはまったく関係のないウェブ計算関数を定義することもできる。
例えば、githubウェブフックをリッスンするウェブ計算関数は、データを解析し、データベースコレクションに情報を保存し、同じコレクションからのデータを提示する動的ページがある。ここにはパブリックサイトのスクリプトは含まれていない。
場所
計算関数のコードを専用のJSファイルに格納する。ユーザは計算関数を定義できる-そしてUIはすべての計算関数のコードが置かれるファイルを開く。
そのファイルのコードが大きくなる可能性がある場合は、この態様を再検討する必要が
あり得る。
計算関数のコードを専用のJSファイルに格納する。ユーザは計算関数を定義できる-そしてUIはすべての計算関数のコードが置かれるファイルを開く。
そのファイルのコードが大きくなる可能性がある場合は、この態様を再検討する必要が
あり得る。
計算関数を定義する方法
計算関数には2つの態様がある。
1.設計時の態様-ユーザが計算関数を定義し、HTTPメソッド、受け入れる要求コンテンツタイプ、生成する応答コンテンツタイプなど、様々な態様を構成する方法。
2.実行時の態様-このような計算関数が定義されたならば-適切なHTTPエンドポイントが公開されるべきであり、計算関数のコードの実行にリダイレクトするために呼び出されたとき、および既存の計算関数が削除されたときに、既存のHTTPエンドポイントを除去するべきである。当然のことながら、これは、サイトの公開後、またはユーザによる計算関数のテスト目的で公開する前にのみ利用可能にするべきである。
計算関数には2つの態様がある。
1.設計時の態様-ユーザが計算関数を定義し、HTTPメソッド、受け入れる要求コンテンツタイプ、生成する応答コンテンツタイプなど、様々な態様を構成する方法。
2.実行時の態様-このような計算関数が定義されたならば-適切なHTTPエンドポイントが公開されるべきであり、計算関数のコードの実行にリダイレクトするために呼び出されたとき、および既存の計算関数が削除されたときに、既存のHTTPエンドポイントを除去するべきである。当然のことながら、これは、サイトの公開後、またはユーザによる計算関数のテスト目的で公開する前にのみ利用可能にするべきである。
設計時の態様
・計算関数のプレフィックスごとにエクスポートされた関数を定義する
・関数には次のプレフィックスがある:get_、post_、put_、delete_、use_
・プレフィックスの後の関数名は、ウェブエンドポイントのパスプレフィックスを表す
・すべきこと:新しい計算関数を定義する方法のUIの態様をまとめる必要が依然としてある
//URLのためのすべてのGET要求
//http[s]://{user_domain}/_api/endpoints/example/*はここにルーティングされる
//URLのためのすべてのPOST要求
//http[s]://{user_domain}/_api/endpoints/kuku/*はここにルーティングされる
//URLのためにどのHTTPメソッドが呼び出されたかに関係なくすべてのHTTP要求
//http[s]://{user_domain}/_api/endpoint
s/jojo/*はここにルーティングされる
他の却下された代替策については、付属書類Aを参照されたい。
良い点:
・シンプルな定義、UIにより容易に支援可能
・構成はコードに近い
・反映の必要がない
・現在パブリックに利用可能なJSの仕様を使用する
悪い点:
・HTTP呼び出しへの関数の動的バインディング-事前定義された構成が存在しない
・あいまいな定義が発生し得る-例えば、同じエンドポイントでget_とuse_
○文書化する必要がある単純な優先順位アルゴリズムによって解決できる。特定のメソッドはuse_*よりも優先される
・一部の文字はプレフィックスの一部にすることができない(例えば、「-」という文字)
○JS関数名に配置することがサポートされていないすべての文字
再検討:wixインフラストラクチャのリダイレクトレベルによっては、途中でいくつかの内部ヘッダが追加される場合がある。これは、要求ヘッダの提供を回避することで解決できる。一方、機密ヘッダがサービスに転送されるような場合は、おそらく通信プロトコルのセキュリティ問題であり、なんとしても回避する必要があり、関連するプロトコルを再設計することで解決できる。
ユーザランタイムは今日も安全ではない環境と見なされているため、ユーザコンテナに機密情報を保持したり、渡したりすることはない。ユーザがアクセスできないようにしたいものがあれば、ディスパッチ中にそれを削除できる。
・計算関数のプレフィックスごとにエクスポートされた関数を定義する
・関数には次のプレフィックスがある:get_、post_、put_、delete_、use_
・プレフィックスの後の関数名は、ウェブエンドポイントのパスプレフィックスを表す
・すべきこと:新しい計算関数を定義する方法のUIの態様をまとめる必要が依然としてある
//URLのためのすべてのGET要求
//http[s]://{user_domain}/_api/endpoints/example/*はここにルーティングされる
//URLのためのすべてのPOST要求
//http[s]://{user_domain}/_api/endpoints/kuku/*はここにルーティングされる
//URLのためにどのHTTPメソッドが呼び出されたかに関係なくすべてのHTTP要求
//http[s]://{user_domain}/_api/endpoint
s/jojo/*はここにルーティングされる
他の却下された代替策については、付属書類Aを参照されたい。
良い点:
・シンプルな定義、UIにより容易に支援可能
・構成はコードに近い
・反映の必要がない
・現在パブリックに利用可能なJSの仕様を使用する
悪い点:
・HTTP呼び出しへの関数の動的バインディング-事前定義された構成が存在しない
・あいまいな定義が発生し得る-例えば、同じエンドポイントでget_とuse_
○文書化する必要がある単純な優先順位アルゴリズムによって解決できる。特定のメソッドはuse_*よりも優先される
・一部の文字はプレフィックスの一部にすることができない(例えば、「-」という文字)
○JS関数名に配置することがサポートされていないすべての文字
再検討:wixインフラストラクチャのリダイレクトレベルによっては、途中でいくつかの内部ヘッダが追加される場合がある。これは、要求ヘッダの提供を回避することで解決できる。一方、機密ヘッダがサービスに転送されるような場合は、おそらく通信プロトコルのセキュリティ問題であり、なんとしても回避する必要があり、関連するプロトコルを再設計することで解決できる。
ユーザランタイムは今日も安全ではない環境と見なされているため、ユーザコンテナに機密情報を保持したり、渡したりすることはない。ユーザがアクセスできないようにしたいものがあれば、ディスパッチ中にそれを削除できる。
要求および応答のデータ構造
ルータ機能に関して、要求オブジェクトおよび応答オブジェクトのデータ構造を統一するよう努めている。
//プレミアムWixサイトのドメインまたは無料WixサイトのURL
//パートで分解されたAPIルートへの相対パス
//関数がアクセスされたURL全体
//元のクライアントIP
//このオブジェクトはクエリパラメータ名のキー/値およびそのそれぞれ値を有する
//このオブジェクトはヘッダのキー/値およびそのそれぞれ値を有する
//要求のボディ
//”GET”、”POST”、...
//応答のステータスコードを表す整数の数値
//ルータの応答関数、例えばok()、forbidden()、notFound()などをここで再利用する場合がある
//応答のボディ
//このオブジェクトはヘッダのキー/値およびそのそれぞれ値を有する
応答のためのファクトリ
//応答ファクトリからready応答がある
//wix-compute-functions.jsを含む。これは以下の関数を公開する。
//一般的な応答
//200 OK応答
//201 Created応答
//404 Not Found応答
//500 Internal Server Error応答
//400 Bad Request応答
//403 Forbidden応答
ルータ機能に関して、要求オブジェクトおよび応答オブジェクトのデータ構造を統一するよう努めている。
//プレミアムWixサイトのドメインまたは無料WixサイトのURL
//パートで分解されたAPIルートへの相対パス
//関数がアクセスされたURL全体
//元のクライアントIP
//このオブジェクトはクエリパラメータ名のキー/値およびそのそれぞれ値を有する
//このオブジェクトはヘッダのキー/値およびそのそれぞれ値を有する
//要求のボディ
//”GET”、”POST”、...
//応答のステータスコードを表す整数の数値
//ルータの応答関数、例えばok()、forbidden()、notFound()などをここで再利用する場合がある
//応答のボディ
//このオブジェクトはヘッダのキー/値およびそのそれぞれ値を有する
応答のためのファクトリ
//応答ファクトリからready応答がある
//wix-compute-functions.jsを含む。これは以下の関数を公開する。
//一般的な応答
//200 OK応答
//201 Created応答
//404 Not Found応答
//500 Internal Server Error応答
//400 Bad Request応答
//403 Forbidden応答
実行時の態様-実行のためのマッピング
注意-各サイトにcompute-functions.jsというファイルがあり、エンドポイントのURLから関数へのマッピングは、関数のコード自体と共に配置されている。
注意-各サイトにcompute-functions.jsというファイルがあり、エンドポイントのURLから関数へのマッピングは、関数のコード自体と共に配置されている。
サイトをWixコード計算関数にマッピングする
・UIを介して計算関数を作成すると、/compute-functions.jsというパスのエレメンタリに、関連するサイトコンテキストの下のファイルが作成される
ドメインからサイトlDを取得する簡単な方法はないようである。どのgridAppIdを起動するべきかを理解するために、3つのRPC呼び出しがある。
しかしながら、metaSiteId/siteId/domainが変更された場合、これら3つのRPC呼び出しをキャッシュすることを勧める。キャッシュを更新する、または定期的なポーリングによってキャッシュを更新するイベントが必要であり、これは結果整合性を示す(イベントが万全であることに頼ることはできないため、キャッシュ更新の代替策において)。出願人らの理解では、metaSiteIdの変更またはドメインの変更のイベントはない。
ドメイン→gridAppIdをキャッシュすることが提案されている。gridAppIdは保存後に変更される可能性があるため、保存するたびにキャッシュを無効にする。このイベントは既にwixコードで扱われている。パブリッシュイベントをリッスンしていた場合、それが存在する方が良い。
ドメイン名/無料サイト名に変更がある場合-新しいドメインはキャッシュにないため、まずこの新しいドメインのフロー全体を再度実行してキャッシュする。
キャッシュは、最終接触時間に基づいたエビクションポリシーを有するべきである。
・UIを介して計算関数を作成すると、/compute-functions.jsというパスのエレメンタリに、関連するサイトコンテキストの下のファイルが作成される
ドメインからサイトlDを取得する簡単な方法はないようである。どのgridAppIdを起動するべきかを理解するために、3つのRPC呼び出しがある。
しかしながら、metaSiteId/siteId/domainが変更された場合、これら3つのRPC呼び出しをキャッシュすることを勧める。キャッシュを更新する、または定期的なポーリングによってキャッシュを更新するイベントが必要であり、これは結果整合性を示す(イベントが万全であることに頼ることはできないため、キャッシュ更新の代替策において)。出願人らの理解では、metaSiteIdの変更またはドメインの変更のイベントはない。
ドメイン→gridAppIdをキャッシュすることが提案されている。gridAppIdは保存後に変更される可能性があるため、保存するたびにキャッシュを無効にする。このイベントは既にwixコードで扱われている。パブリッシュイベントをリッスンしていた場合、それが存在する方が良い。
ドメイン名/無料サイト名に変更がある場合-新しいドメインはキャッシュにないため、まずこの新しいドメインのフロー全体を再度実行してキャッシュする。
キャッシュは、最終接触時間に基づいたエビクションポリシーを有するべきである。
実行時の態様-プレビュー対公開
ユーザが計算関数を開発するとき-公開する前にウェブエンドポイントに「開発モード」を提供するべきではないだろうか。
新しい関数の場合-関数のコードがデータを操作する場合に役立つ。ユーザは、新しいコードが既存のデータを破損しないことを確認したいため、公開前にコードをテストすることを望む。加えて、計算関数が既に公開されており、例えば新しいプロトコルをサポートするために、ユーザが更新する必要がある場合、新しい関数のコードが期待どおりに実行しているようになると確信できるまで、関数の既存の機能を壊したくない。
この機能をどのように提供するべきであろうか。つまり、現在公開されているウェブエンドポイントと並行して動作する更新された関数をウェブに公開するという機能をどのように提供するべきであろうか。
ユーザが計算関数を開発するとき-公開する前にウェブエンドポイントに「開発モード」を提供するべきではないだろうか。
新しい関数の場合-関数のコードがデータを操作する場合に役立つ。ユーザは、新しいコードが既存のデータを破損しないことを確認したいため、公開前にコードをテストすることを望む。加えて、計算関数が既に公開されており、例えば新しいプロトコルをサポートするために、ユーザが更新する必要がある場合、新しい関数のコードが期待どおりに実行しているようになると確信できるまで、関数の既存の機能を壊したくない。
この機能をどのように提供するべきであろうか。つまり、現在公開されているウェブエンドポイントと並行して動作する更新された関数をウェブに公開するという機能をどのように提供するべきであろうか。
アルゴリズム
・エディタクライアントがロードされると、そのSCARIがAPIディスパッチャサービスに送信される(IDEサーバ経由)
・APIディスパッチャサービスには、テスト用のドメイン→gridAppIdのマッピングがある
○エディタセグメント(テスト)とパブリックセグメント(公開サイトAPIアクセス)とを分離してみる。
○このgridAppIdは、エディタで現在開発されているバージョンを表し、公開後に変更が発生していない場合は、公開されたバージョンでも、新しく開発されたバージョン(保存されていないバージョン)でもよい。
・cloneCodeApp/duplicateCodeApp/createAppのwixコードサービスの呼び出しがあるたびに、新しく生成されたgridAppIdは、APIディスパッチャサービスに伝播される
・現在開発されているバージョンへのアクセスは、URIセクションに記載されている開発URIを介して行われる。
そして、api-devの要求がAPIディスパッチャにより受信されると、ドメインごとにgridAppIdのキャッシュを取得する。存在しない場合、公開されたサイトと同様のプロトコルにフォールバックし、最後に保存されたバージョンのgridAppIdをキャッシュする。
注意:エディタを開いているときにドメインが変更されると、問題が発生する可能性がある。そのようなイベントが存在する場合はリッスンし、それに応じてキャッシュを更新するか、制限を宣言する必要がある。
別の可能な代替策としては、エディタのロード時に、クライアントによって送信されたwixコードinstanceId→gridAppIdをキャッシュし(ドメインの解決なし)、実際のapi-dev要求で、上図のように同様のフローでドメインを解決し、およびドメイン→gridAppIdもキャッシュする。
次に、cloneCodeApp/duplicateCodeAppが発生すると、
前のgridAppIdで両方のキャッシュを更新する(gridAppIdによる逆インデックスもある)。
これにより、「ドメインの変更」問題も解決される。
これはいくらか複雑なメカニズムのようである。制限を設けて、テストの前に保存するように要求してはどうだろうか。または、APIをテストするための他の「オンデマンド」イベント、例えばAPIをテストするなど?
・エディタクライアントがロードされると、そのSCARIがAPIディスパッチャサービスに送信される(IDEサーバ経由)
・APIディスパッチャサービスには、テスト用のドメイン→gridAppIdのマッピングがある
○エディタセグメント(テスト)とパブリックセグメント(公開サイトAPIアクセス)とを分離してみる。
○このgridAppIdは、エディタで現在開発されているバージョンを表し、公開後に変更が発生していない場合は、公開されたバージョンでも、新しく開発されたバージョン(保存されていないバージョン)でもよい。
・cloneCodeApp/duplicateCodeApp/createAppのwixコードサービスの呼び出しがあるたびに、新しく生成されたgridAppIdは、APIディスパッチャサービスに伝播される
・現在開発されているバージョンへのアクセスは、URIセクションに記載されている開発URIを介して行われる。
そして、api-devの要求がAPIディスパッチャにより受信されると、ドメインごとにgridAppIdのキャッシュを取得する。存在しない場合、公開されたサイトと同様のプロトコルにフォールバックし、最後に保存されたバージョンのgridAppIdをキャッシュする。
注意:エディタを開いているときにドメインが変更されると、問題が発生する可能性がある。そのようなイベントが存在する場合はリッスンし、それに応じてキャッシュを更新するか、制限を宣言する必要がある。
別の可能な代替策としては、エディタのロード時に、クライアントによって送信されたwixコードinstanceId→gridAppIdをキャッシュし(ドメインの解決なし)、実際のapi-dev要求で、上図のように同様のフローでドメインを解決し、およびドメイン→gridAppIdもキャッシュする。
次に、cloneCodeApp/duplicateCodeAppが発生すると、
前のgridAppIdで両方のキャッシュを更新する(gridAppIdによる逆インデックスもある)。
これにより、「ドメインの変更」問題も解決される。
これはいくらか複雑なメカニズムのようである。制限を設けて、テストの前に保存するように要求してはどうだろうか。または、APIをテストするための他の「オンデマンド」イベント、例えばAPIをテストするなど?
デバッギング
ウェブフックでのハッカソンの苦痛の1つは、バックエンドコードにデバッグ機能がないことであった。機能を追加する必要があり、これは製品の未解決の問題である。
ウェブフックでのハッカソンの苦痛の1つは、バックエンドコードにデバッグ機能がないことであった。機能を追加する必要があり、これは製品の未解決の問題である。
好ましい解決策
ユーザは、こちらに似たconsole.log出力の連続的なストリームのためのウェブエンドポイントを有する。
[https://webtask.io/docs/api_logs]
このことは慎重に検討する必要があるが、これは大量にリソースを消費するものになり得る。
ユーザは、こちらに似たconsole.log出力の連続的なストリームのためのウェブエンドポイントを有する。
[https://webtask.io/docs/api_logs]
このことは慎重に検討する必要があるが、これは大量にリソースを消費するものになり得る。
他の代替策
・ロギングAPIを提供し、サイトごとにローリングログファイルを用意し、これはユーザがエディタを介してダウンロードできる。
・特別なUIを開発モードで開くと、それらのログを印刷される
○実際には、これは上記の好ましい解決策に追加され得る
・開発者はヘッダ、例えばx-debugを提供でき、それに応じて要求に関するデバッグ情報を保持する一意のURLを含む応答ヘッダを受け取る。サイトごとに最大50個のURLである。情報は5分間メモリに保持される
○マシンごとに200のエレメントリがあることを考えると、これがエレメントリのインメモリに保持されている場合、メモリに関して問題はないはずである。
・ロギングAPIを提供し、サイトごとにローリングログファイルを用意し、これはユーザがエディタを介してダウンロードできる。
・特別なUIを開発モードで開くと、それらのログを印刷される
○実際には、これは上記の好ましい解決策に追加され得る
・開発者はヘッダ、例えばx-debugを提供でき、それに応じて要求に関するデバッグ情報を保持する一意のURLを含む応答ヘッダを受け取る。サイトごとに最大50個のURLである。情報は5分間メモリに保持される
○マシンごとに200のエレメントリがあることを考えると、これがエレメントリのインメモリに保持されている場合、メモリに関して問題はないはずである。
付属書類
却下された設計時の態様の代替策
代替策1:ほぼjax-rs APIからのコピー/ペースト
@decoratorsを使用できればいいのであるが、利用できるのは、次のjavascriptの仕様であるES8のようである。
Babelトランスパイラは、いくつかの実験モードでサポートしている。
その後、反映を使用して、これらすべての計算関数メソッドを検索し、これらを構成に応じてマッピングできる。
//@postであってもよい
//ウェブエンドポイントはGET HTTPメソッドのために公開される
//それは例えば以下のURLにおいてである。
//https://mydomain.com/_api/endpoints/example/path
//要求のためにアプリケーション/JSONコンテンツタイプを期待する
//期待される応答のコンテンツタイプを定義する
良い点:
・明確で簡単な宣言
悪い点:
・要求のアクセプトおよび応答のコンテンツタイプヘッダのこのようなマッピングは、例えばワイルドカードが使用されている場合、ディスパッチャにとって難しいようである。放棄するべきかもしれない
・ファイナライズされていない仕様の使用(現在ステージ2-https://github.com/tc39/proposal-decorators)
・関連するマッピングを見つけるために反映を必要とする
却下された設計時の態様の代替策
代替策1:ほぼjax-rs APIからのコピー/ペースト
@decoratorsを使用できればいいのであるが、利用できるのは、次のjavascriptの仕様であるES8のようである。
Babelトランスパイラは、いくつかの実験モードでサポートしている。
その後、反映を使用して、これらすべての計算関数メソッドを検索し、これらを構成に応じてマッピングできる。
//ウェブエンドポイントはGET HTTPメソッドのために公開される
//それは例えば以下のURLにおいてである。
//https://mydomain.com/_api/endpoints/example/path
//要求のためにアプリケーション/JSONコンテンツタイプを期待する
//期待される応答のコンテンツタイプを定義する
良い点:
・明確で簡単な宣言
悪い点:
・要求のアクセプトおよび応答のコンテンツタイプヘッダのこのようなマッピングは、例えばワイルドカードが使用されている場合、ディスパッチャにとって難しいようである。放棄するべきかもしれない
・ファイナライズされていない仕様の使用(現在ステージ2-https://github.com/tc39/proposal-decorators)
・関連するマッピングを見つけるために反映を必要とする
代替策2:計算関数の構成がコードと別個に格納される
マッピングがユーザによって宣言される特別なメソッドを、事前定義された名前で提供できる。
//configは以下のメソッドを有する
//config.register(method,path,functionName)
//実行するためにHTTPメソッド、パス、関数をマップする
//関数は以下のシグネチャのものであることが期待される
//function someFunction(request,respons
e)
//正確なパスマッピング
//ワイルドカードパスマッピング。すべての/kukuのサブパスがこの関数にマップされる
良い点:
・非常に簡単な宣言
・反映の必要がない
・現在パブリックに利用可能なJSの仕様を使用する
悪い点:
・関数名が文字列として宣言され、タイプミスが発生し得る
・構成はメソッド自体にはほど「遠い」
マッピングがユーザによって宣言される特別なメソッドを、事前定義された名前で提供できる。
//configは以下のメソッドを有する
//config.register(method,path,functionName)
//実行するためにHTTPメソッド、パス、関数をマップする
//関数は以下のシグネチャのものであることが期待される
//function someFunction(request,respons
e)
//正確なパスマッピング
//ワイルドカードパスマッピング。すべての/kukuのサブパスがこの関数にマップされる
良い点:
・非常に簡単な宣言
・反映の必要がない
・現在パブリックに利用可能なJSの仕様を使用する
悪い点:
・関数名が文字列として宣言され、タイプミスが発生し得る
・構成はメソッド自体にはほど「遠い」
代替策3:Expressに似た構成
例えばWixComputeFunctionsなどの計算関数のレジストラとして機能するグローバルオブジェクトがいくつかある。
//正確なパスマッピング
//パスおよびすべてのその子孫
良い点:
・簡単な定義、Expressに似たAPI
・構成はコードに近い
・反映の必要がない
・現在パブリックに利用可能なJSの仕様を使用する
悪い点:
・グローバルオブジェクトを公開する
・あいまいな定義が発生し得る-なんらかの優先順位アルゴリズムが必要
例えばWixComputeFunctionsなどの計算関数のレジストラとして機能するグローバルオブジェクトがいくつかある。
//正確なパスマッピング
//パスおよびすべてのその子孫
良い点:
・簡単な定義、Expressに似たAPI
・構成はコードに近い
・反映の必要がない
・現在パブリックに利用可能なJSの仕様を使用する
悪い点:
・グローバルオブジェクトを公開する
・あいまいな定義が発生し得る-なんらかの優先順位アルゴリズムが必要
代替策3.1:Expressに似た構文を有する構成関数
実行するためのHTTPメソッド、パス、および関数を構成するためのExpressに似たパターン。
//configは以下のメソッドを有する:get,post,use
//config.get(path,function)
//実行するためにHTTPメソッド、パス、関数をマップする
//use使用時は任意のHTTPメソッドが関数を呼び出す
//正確なパスマッピング
//ワイルドカードパスマッピング。すべての/kukuのサブパスがこの関数にマップされる
良い点:
・簡単な定義、Expressに似たAPI
・構成はコードに近い
・反映の必要がない
・現在パブリックに利用可能なJSの仕様を使用する
悪い点:
・あいまいな定義が発生し得る-なんらかの優先順位アルゴリズムが必要
実行するためのHTTPメソッド、パス、および関数を構成するためのExpressに似たパターン。
//configは以下のメソッドを有する:get,post,use
//config.get(path,function)
//実行するためにHTTPメソッド、パス、関数をマップする
//use使用時は任意のHTTPメソッドが関数を呼び出す
//正確なパスマッピング
//ワイルドカードパスマッピング。すべての/kukuのサブパスがこの関数にマップされる
良い点:
・簡単な定義、Expressに似たAPI
・構成はコードに近い
・反映の必要がない
・現在パブリックに利用可能なJSの仕様を使用する
悪い点:
・あいまいな定義が発生し得る-なんらかの優先順位アルゴリズムが必要
14-WDB
Wix DB
概要
ドックストアは、データを管理するためのRESTful APIを公開する一般的なマルチテナントドキュメントスタイルのデータサービスである。すべてのテナントは、いくつかの個別の仮想データベースを持つことができる。サービスはまた、テナントのデータベースを管理したり、場合によりテナントを無効にしたりするための、管理サーバ間(ユーザ向けではない)APIを有する。
Wix DB
概要
ドックストアは、データを管理するためのRESTful APIを公開する一般的なマルチテナントドキュメントスタイルのデータサービスである。すべてのテナントは、いくつかの個別の仮想データベースを持つことができる。サービスはまた、テナントのデータベースを管理したり、場合によりテナントを無効にしたりするための、管理サーバ間(ユーザ向けではない)APIを有する。
ストレージモデル
データの格納に使用される基礎となるデータベースはMongoDBであり、サービスはシャーディング目的で複数の物理MongoDBデータベースをサポートする。
データの格納に使用される基礎となるデータベースはMongoDBであり、サービスはシャーディング目的で複数の物理MongoDBデータベースをサポートする。
仮想/物理データベースマッピング
最初の要求時および認証チェックを通過した後、各テナント仮想データベースはサービスが動作している物理MongoDBデータベースのうちの1つに割り当てられ、その時
点から、そのテナントのデータベースのすべての到来する要求はその物理データベースに対して実行される。
仮想テナントデータベースから物理データベースへのマッピングは管理データベースで維持され、ホットマッピングレコードはLRUベースのインメモリキャッシュに保持される。
最初の要求時および認証チェックを通過した後、各テナント仮想データベースはサービスが動作している物理MongoDBデータベースのうちの1つに割り当てられ、その時
点から、そのテナントのデータベースのすべての到来する要求はその物理データベースに対して実行される。
仮想テナントデータベースから物理データベースへのマッピングは管理データベースで維持され、ホットマッピングレコードはLRUベースのインメモリキャッシュに保持される。
仮想データベースモデル
各テナント仮想データベースには、1つまたは複数のドキュメントのコレクションを含めることができる。各仮想コレクションは、1つの物理MongoDBコレクションにマップされる。コレクションのマッピングは、シンプルなネームスペーシングシステムを使用して行われる。各物理コレクションには、<tenantId>@<vdb-name>@<collection-name>という名前が付けられる。したがって、要求が到来すると、認証チェックを通過した後、テナントID、ターゲットデータベース、およびコレクション名が解決され、物理コレクション名が構築されてアクセスできるようになる。
各テナント仮想データベースには、1つまたは複数のドキュメントのコレクションを含めることができる。各仮想コレクションは、1つの物理MongoDBコレクションにマップされる。コレクションのマッピングは、シンプルなネームスペーシングシステムを使用して行われる。各物理コレクションには、<tenantId>@<vdb-name>@<collection-name>という名前が付けられる。したがって、要求が到来すると、認証チェックを通過した後、テナントID、ターゲットデータベース、およびコレクション名が解決され、物理コレクション名が構築されてアクセスできるようになる。
物理データベース割り当て
新しいテナントデータベースを導入する場合、永続的なターゲット物理データベースを割り当てる必要がある。物理データベースの選択は、現在のデータベースサイズに基づいて行われる。バックグラウンドタスクは、定期的に実行され、サービスが動作するように構成されているすべてのアクティブなデータベースから統計を収集するようにスケジュールされている。統計値はインメモリデータ構造に格納されるため、新しいデータベースを割り当てるときに、最小のデータベースをターゲットとしてすぐに選択できる。
新しいテナントデータベースを導入する場合、永続的なターゲット物理データベースを割り当てる必要がある。物理データベースの選択は、現在のデータベースサイズに基づいて行われる。バックグラウンドタスクは、定期的に実行され、サービスが動作するように構成されているすべてのアクティブなデータベースから統計を収集するようにスケジュールされている。統計値はインメモリデータ構造に格納されるため、新しいデータベースを割り当てるときに、最小のデータベースをターゲットとしてすぐに選択できる。
15-$WAPI
$W API
$W API
$W APIは、ユーザがコードを使用してビューアコンポーネントと対話できるようにする方法である。SDKは、ユーザコード/拡張機能が実行されているワーカーとランタイム(別名ビューア)との間で使用される内部通信レイヤをラップするために使用される。以下は、論理アーキテクチャを表す図である。
必要性:
RMIの内部モデルは、システムの一部のみを制御および修正したいユーザにとっては複雑すぎ、ドキュメント化されておらず、実行に必要なプロプライエタリ情報が含まれている。$W SDKはこれをラップし、要素を見つけて操作するより一般的なパターンにラップしたものを変換する。
コーディングパターン:
$w SDKでサポートされるコーディングパターンには、次の2つのパートが含まれる。
1.ページライフサイクルイベント:ライフサイクルメソッドを使用すると、SDKを使用したコードが、事前定義された段階においてトリガされる。これらの段階では、SDKが利用可能であり、コードは外部データのロード、コンポーネントの初期化、イベント登録などの様々なタスクを実行できる。現在、単一のメソッドが利用可能であり、これは、ページが提示される前に発生し、PageLoadと呼ばれる。javascriptにpromiseを返すことにより、コードはすべての非同期情報(wixデータまたは外部サービスからの外部データなど)がロードされるまでページの提示を延期できる。
2.選択:$wはページのグローバルコンテキストを表す。同様のコンテキストオブジェクト、すなわちリピータアイテムを描画するときの$itemが存在し得る。コンテキストを使用して、ユーザは、文字列クエリを使用して要素を選択する。セレクタは通常のCSSセレクタに似ているが、わずかな違いがある。選択すると、単一の要素または複数の要素が返され得る。例えば:
$w(’#myElement’)-これはmyElement IDを持つ要素を選択する
セレクタには次のタイプがある。
○IDセレクタ。ページの一意のIDを使用して選択する。
○タイプセレクタ。コンポーネントのタイプを使用して選択する。
○タイプのアレイセレクタ
○ロールセレクタ。これは、独自の事前定義された名前を使うことを選択するためにコントローラによって使用される。要素は、コントローラによって与えられてIDおよび複数のロールを有することができる。
3.要素の操作:要素への参照が取得されると、要素はそれを操作するメソッドを提供する。要素の非表示や表示など、一部のメソッドはすべての要素で利用可能である。一部のメソッドは、特定の要素でのみ利用可能である。完全なリストはSDK documentationで提供されている。
4.イベント登録:各要素は、事前定義されたイベントのセットをサポートする。SDKを使用しているコードは、これらのイベントに登録し、発生時に呼び出されるコールバックメソッドを提供できる。コールバック中に、選択および操作が可能である。
$W API
$W API
$W APIは、ユーザがコードを使用してビューアコンポーネントと対話できるようにする方法である。SDKは、ユーザコード/拡張機能が実行されているワーカーとランタイム(別名ビューア)との間で使用される内部通信レイヤをラップするために使用される。以下は、論理アーキテクチャを表す図である。
RMIの内部モデルは、システムの一部のみを制御および修正したいユーザにとっては複雑すぎ、ドキュメント化されておらず、実行に必要なプロプライエタリ情報が含まれている。$W SDKはこれをラップし、要素を見つけて操作するより一般的なパターンにラップしたものを変換する。
コーディングパターン:
$w SDKでサポートされるコーディングパターンには、次の2つのパートが含まれる。
1.ページライフサイクルイベント:ライフサイクルメソッドを使用すると、SDKを使用したコードが、事前定義された段階においてトリガされる。これらの段階では、SDKが利用可能であり、コードは外部データのロード、コンポーネントの初期化、イベント登録などの様々なタスクを実行できる。現在、単一のメソッドが利用可能であり、これは、ページが提示される前に発生し、PageLoadと呼ばれる。javascriptにpromiseを返すことにより、コードはすべての非同期情報(wixデータまたは外部サービスからの外部データなど)がロードされるまでページの提示を延期できる。
2.選択:$wはページのグローバルコンテキストを表す。同様のコンテキストオブジェクト、すなわちリピータアイテムを描画するときの$itemが存在し得る。コンテキストを使用して、ユーザは、文字列クエリを使用して要素を選択する。セレクタは通常のCSSセレクタに似ているが、わずかな違いがある。選択すると、単一の要素または複数の要素が返され得る。例えば:
$w(’#myElement’)-これはmyElement IDを持つ要素を選択する
セレクタには次のタイプがある。
○IDセレクタ。ページの一意のIDを使用して選択する。
○タイプセレクタ。コンポーネントのタイプを使用して選択する。
○タイプのアレイセレクタ
○ロールセレクタ。これは、独自の事前定義された名前を使うことを選択するためにコントローラによって使用される。要素は、コントローラによって与えられてIDおよび複数のロールを有することができる。
3.要素の操作:要素への参照が取得されると、要素はそれを操作するメソッドを提供する。要素の非表示や表示など、一部のメソッドはすべての要素で利用可能である。一部のメソッドは、特定の要素でのみ利用可能である。完全なリストはSDK documentationで提供されている。
4.イベント登録:各要素は、事前定義されたイベントのセットをサポートする。SDKを使用しているコードは、これらのイベントに登録し、発生時に呼び出されるコールバックメソッドを提供できる。コールバック中に、選択および操作が可能である。
Claims (29)
- ウェブサイトの複数のウェブページに投入されるデータセットを含むバックエンドデータベースを更新するための非一時的コンピュータ可読媒体であって、前記コンピュータ可読媒体が、少なくとも1つのプロセッサにより実行された場合に、
ユーザインターフェースを介して複数のデータ要素を受信するステップであって、前記データ要素が少なくとも1つのデータ要素の1つまたは複数のグループに編成され、各グループがウェブサイトの個別のウェブページに表示するためのものである、ステップと、
前記少なくとも1つのデータ要素のグループをデータベースに格納するステップと、
複数の仮想ウェブページを生成するステップであって、各仮想ウェブページが、対応する実際のウェブページが稼働する前における前記対応する実際のウェブページのプレビューであり、前記対応する実際のウェブページのそれぞれが前記データベースを更新するための機能を備えて設計されていない、ステップと、
前記複数の仮想ウェブページのうちの個別のページに少なくとも1つのデータ要素の各グループを表示するステップと、
ユーザが前記複数の仮想ウェブページからの仮想ウェブページを編集できるように編集ツールを表示するステップと、
前記仮想ウェブページの前記編集を前記データベースのための更新に変換するステップと、
前記データベースに前記更新を格納するステップと、
前記仮想ウェブページに関連付けられた対応する実際のウェブページのライブビュー中に、前記プレビュー中に前記仮想ウェブページに対して前記更新を行った状態で前記対応する実際のウェブページを表示できるようにするステップと、
を前記少なくとも1つのプロセッサに実行させる命令を含む、非一時的コンピュータ可読媒体。 - 前記複数の仮想ウェブページのそれぞれが、前記ユーザインターフェースのエディタインターフェースに関連付けられたフレーム内に表示可能である、請求項1に記載の非一時的コンピュータ可読媒体。
- 前記ステップが、前記複数の仮想ウェブページのそれぞれを個別かつ動的に表示するために、前記ユーザが前記複数の仮想ウェブページにわたってナビゲートできるようにするユーザ選択可能機能を表示するステップをさらに含む、請求項1に記載の非一時的コンピュータ可読媒体。
- 前記ステップが、前記ユーザが前記複数の仮想ウェブページからの特定の仮想ウェブページを前記特定の仮想ウェブページの識別子に基づいて選択できるようにするユーザ選択可能機能を表示するステップをさらに含む、請求項1に記載の非一時的コンピュータ可読媒体。
- 前記特定の仮想ウェブページの前記識別子が、前記特定の仮想ウェブページに関連付けられたデータ要素に基づく、請求項4に記載の非一時的コンピュータ可読媒体。
- 前記ステップが、前記複数の仮想ウェブページのそれぞれに一意のURLを関連付けるステップをさらに含む、請求項1に記載の非一時的コンピュータ可読媒体。
- 前記複数の仮想ウェブページのそれぞれが、前記複数の仮想ウェブページのそれぞれの前記一意のURLを参照するサイトマップに基づいて生成される、請求項6に記載の非一時的コンピュータ可読媒体。
- 前記編集ツールが、前記データベースに前記格納された少なくとも1つのデータ要素のグループに対する編集を受信するように構成される、請求項1に記載の非一時的コンピュータ可読媒体。
- 前記編集ツールが、前記複数の仮想ウェブページの属性に対する編集を受信するように構成される、請求項1に記載の非一時的コンピュータ可読媒体。
- 前記編集ツールが、前記複数の仮想ウェブページを生成するために使用されるコードに対する編集を受信するように構成される、請求項1に記載の非一時的コンピュータ可読媒体。
- 前記編集ツールが、前記複数の仮想ウェブページを生成するために使用される実際のコードを表すスケルトンコードの複数のセグメントを表示するように、また前記実際のコードに対する編集に変換される前記スケルトンコードに対する編集を受信するように構成される、請求項1に記載の非一時的コンピュータ可読媒体。
- 前記データ要素が、外部ソースから前記ユーザインターフェースを介して受信される、請求項1に記載の非一時的コンピュータ可読媒体。
- 動作が、
前記複数の仮想ウェブページに関連付けられたソフトウェアベースのルータにアクセスすることと、
受信したURLの1つまたは複数のセグメントに基づいて前記複数の仮想ウェブページのそれぞれの異なるバージョンを生成するように前記ソフトウェアベースのルータを構成することと、
をさらに含む、請求項1に記載の非一時的コンピュータ可読媒体。 - 少なくとも1つのデータ要素の各グループのサブセットがリピータ機能により編成され、前記リピータ機能が少なくとも1つのデータ要素の各グループの前記サブセットの1つまたは複数の表示されたインスタンスを生成する、請求項1に記載の非一時的コンピュータ可読媒体。
- 前記対応する実際のウェブページの前記ライブビューが前記1つまたは複数のインスタンスを含む、請求項14に記載の非一時的コンピュータ可読媒体。
- ウェブサイトの複数のウェブページに投入されるデータセットを含むバックエンドデータベースを更新するためのコンピュータ実施方法であって、前記方法が、
ユーザインターフェースを介して複数のデータ要素を受信するステップであって、前記データ要素が少なくとも1つのデータ要素の1つまたは複数のグループに編成され、各グループがウェブサイトの個別のウェブページに表示するためのものである、ステップと、
前記少なくとも1つのデータ要素のグループをデータベースに格納するステップと、
複数の仮想ウェブページを生成するステップであって、各仮想ウェブページが、対応する実際のウェブページが稼働する前における前記対応する実際のウェブページのプレビューであり、前記対応する実際のウェブページのそれぞれが前記データベースを更新するための機能を備えて設計されていない、ステップと、
前記複数の仮想ウェブページのうちの個別のページに少なくとも1つのデータ要素の各グループを表示するステップと、
ユーザが前記複数の仮想ウェブページからの仮想ウェブページを編集できるように編集ツールを表示するステップと、
前記仮想ウェブページの前記編集を前記データベースのための更新に変換するステップ
と、
前記データベースに前記更新を格納するステップと、
前記仮想ウェブページに関連付けられた対応する実際のウェブページのライブビュー中に、前記プレビュー中に前記仮想ウェブページに対して前記更新を行った状態で前記対応する実際のウェブページを表示できるようにするステップと、
を含む、コンピュータ実施方法。 - 前記複数の仮想ウェブページのそれぞれが、前記ユーザインターフェースのエディタインターフェースに関連付けられたフレーム内に表示可能である、請求項16に記載のコンピュータ実施方法。
- 前記複数の仮想ウェブページのそれぞれを個別かつ動的に表示するために、前記ユーザが前記複数の仮想ウェブページにわたってナビゲートできるようにするユーザ選択可能機能を表示するステップをさらに含む、請求項16に記載のコンピュータ実施方法。
- 前記ユーザが前記複数の仮想ウェブページからの特定の仮想ウェブページを前記特定の仮想ウェブページの識別子に基づいて選択できるようにするユーザ選択可能機能を表示するステップをさらに含む、請求項16に記載のコンピュータ実施方法。
- 前記特定の仮想ウェブページの前記識別子が、前記特定の仮想ウェブページに関連付けられたデータ要素に基づく、請求項16に記載のコンピュータ実施方法。
- 前記複数の仮想ウェブページのそれぞれに一意のURLを関連付けるステップをさらに含む、請求項16に記載のコンピュータ実施方法。
- 前記複数の仮想ウェブページのそれぞれが、前記複数の仮想ウェブページのそれぞれの前記一意のURLを参照するサイトマップに基づいて生成される、請求項21に記載のコンピュータ実施方法。
- 前記編集ツールが、前記データベースに前記格納された少なくとも1つのデータ要素のグループに対する編集を受信するように構成される、請求項16に記載のコンピュータ実施方法。
- 前記編集ツールが、前記複数の仮想ウェブページの属性に対する編集を受信するように構成される、請求項16に記載のコンピュータ実施方法。
- 前記編集ツールが、前記複数の仮想ウェブページを生成するために使用されるコードに対する編集を受信するように構成される、請求項16に記載のコンピュータ実施方法。
- 前記編集ツールが、前記複数の仮想ウェブページを生成するために使用される実際のコードを表すスケルトンコードの複数のセグメントを表示するように、また前記実際のコードに対する編集に変換される前記スケルトンコードに対する編集を受信するように構成される、請求項16に記載のコンピュータ実施方法。
- 前記データ要素が、外部ソースから前記ユーザインターフェースを介して受信される、請求項16に記載のコンピュータ実施方法。
- ウェブページに投入されるデータセットを含むバックエンドデータベースを更新するために前記ウェブページを動的に編集できるようにするシステムであって、前記システムが、
複数のウェブページに表示するための複数のデータ要素を格納するように構成されたオンラインデータベースであって、前記データ要素が、少なくとも1つのデータ要素の1つまたは複数のグループに編成され、各グループがウェブサイトの個別のウェブページに表示するためのものであり、各個別のウェブページが前記オンラインデータベースを更新するための機能を持たない、オンラインデータベースと、
少なくとも1つのプロセッサであって、
少なくとも1つのデータ要素のグループに基づいて生成された第1のウェブページの編集可能なバージョンを表示するインターフェースを提供するための命令をブラウザにリモートで提供し、前記インターフェースによりユーザが前記少なくとも1つのデータ要素を編集でき、
前記インターフェースを介して受信した、前記第1のウェブページの前記編集可能なバージョンに対する編集を、前記オンラインデータベースのための更新に変換し、
前記オンラインデータベースに前記更新を格納し、
前記第1のウェブページのライブビュー中に、前記第1のウェブページの前記編集可能なバージョンに対して前記更新を行った状態で前記第1のウェブページを表示できるようにする、
ように構成される、少なくとも1つのプロセッサと、
を備える、システム。 - 前記少なくとも1つのプロセッサが、ウェブページの複数の個別の編集可能なバージョンを生成するようにさらに構成され、ウェブページの個別の編集可能なバージョンはそれぞれ、前記インターフェースのエディタインターフェースに関連付けられたフレーム内に表示可能である、請求項28に記載のシステム。
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762536403P | 2017-07-24 | 2017-07-24 | |
US62/536,403 | 2017-07-24 | ||
US201862702278P | 2018-07-23 | 2018-07-23 | |
US62/702,278 | 2018-07-23 | ||
PCT/IB2018/001028 WO2019038588A1 (en) | 2017-07-24 | 2018-07-24 | EDITING A DATABASE WHEN PREDICTING A VIRTUAL WEB PAGE |
JP2020503801A JP2020530610A (ja) | 2017-07-24 | 2018-07-24 | 仮想ウェブページのプレビュー中におけるデータベースの編集 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020503801A Division JP2020530610A (ja) | 2017-07-24 | 2018-07-24 | 仮想ウェブページのプレビュー中におけるデータベースの編集 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2024075645A true JP2024075645A (ja) | 2024-06-04 |
Family
ID=65014202
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020503801A Pending JP2020530610A (ja) | 2017-07-24 | 2018-07-24 | 仮想ウェブページのプレビュー中におけるデータベースの編集 |
JP2024040504A Pending JP2024075645A (ja) | 2017-07-24 | 2024-03-14 | 仮想ウェブページのプレビュー中におけるデータベースの編集 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020503801A Pending JP2020530610A (ja) | 2017-07-24 | 2018-07-24 | 仮想ウェブページのプレビュー中におけるデータベースの編集 |
Country Status (9)
Country | Link |
---|---|
US (11) | US10209966B2 (ja) |
EP (2) | EP4235461A3 (ja) |
JP (2) | JP2020530610A (ja) |
AU (2) | AU2018319444B2 (ja) |
BR (1) | BR112019024309A2 (ja) |
CA (1) | CA3060362A1 (ja) |
ES (1) | ES2970458T3 (ja) |
IL (1) | IL271915A (ja) |
WO (1) | WO2019038588A1 (ja) |
Families Citing this family (55)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8671352B1 (en) | 2013-05-07 | 2014-03-11 | Axure Software Solutions, Inc. | Variable dimension version editing for graphical designs |
US9158656B1 (en) * | 2014-07-15 | 2015-10-13 | American Express Travel Related Services Company, Inc. | Systems and methods for progressively launching websites |
US10209966B2 (en) | 2017-07-24 | 2019-02-19 | Wix.Com Ltd. | Custom back-end functionality in an online website building environment |
US20190065487A1 (en) * | 2017-08-22 | 2019-02-28 | Salesforce.Com, Inc. | Filter logic in a dynamic page previewer |
US11392664B1 (en) * | 2017-08-29 | 2022-07-19 | Massachusetts Mutual Life Insurance Company | Dynamic web application based on events |
GB201804904D0 (en) * | 2018-03-27 | 2018-05-09 | Palantir Technologies Inc | Code correction |
JP2019211827A (ja) * | 2018-05-31 | 2019-12-12 | ファナック株式会社 | 支援装置 |
CN109213486A (zh) * | 2018-08-20 | 2019-01-15 | 北京百度网讯科技有限公司 | 用于生成用户定制的可视化组件的方法和装置 |
US10592589B1 (en) | 2018-08-21 | 2020-03-17 | Axure Software Solutions, Inc. | Multi-view masters for graphical designs |
US10691428B2 (en) * | 2018-10-24 | 2020-06-23 | Sap Se | Digital compliance platform |
WO2020100081A1 (en) | 2018-11-14 | 2020-05-22 | Wix.Com Ltd. | System and method for creation and handling of configurable applications for website building systems |
US10757009B2 (en) | 2018-11-20 | 2020-08-25 | Amazon Technologies, Inc. | Global-scale connectivity using scalable virtual traffic hubs |
US11579908B2 (en) | 2018-12-18 | 2023-02-14 | Vmware, Inc. | Containerized workload scheduling |
JP2022100419A (ja) * | 2019-04-23 | 2022-07-06 | 株式会社ラキール | 情報処理システム、情報処理装置、情報処理方法及びプログラム |
US11134028B2 (en) | 2019-04-26 | 2021-09-28 | NM Nevada Trust | Devices, systems and methods for optimizing workload performance of user facing web applications during high load events |
CN110362299B (zh) * | 2019-06-14 | 2020-06-26 | 杭州古德微机器人有限公司 | 一种基于blockly和树莓派的在线图形化编程***及其使用方法 |
US11349839B2 (en) * | 2019-06-28 | 2022-05-31 | Google Llc | Systems and methods using modular user interfaces for managing network permissions |
CN110286896B (zh) * | 2019-06-28 | 2023-03-31 | 百度在线网络技术(北京)有限公司 | 可视化编辑方法、装置、设备及存储介质 |
US11635990B2 (en) | 2019-07-01 | 2023-04-25 | Nutanix, Inc. | Scalable centralized manager including examples of data pipeline deployment to an edge system |
US11501881B2 (en) | 2019-07-03 | 2022-11-15 | Nutanix, Inc. | Apparatus and method for deploying a mobile device as a data source in an IoT system |
US11457009B2 (en) * | 2019-07-17 | 2022-09-27 | Infiltron Holdings, Inc. | Systems and methods for securing devices in a computing environment |
US10789195B1 (en) * | 2019-07-17 | 2020-09-29 | Capital One Services, Llc | Article, device, and techniques for serverless streaming message processing |
CN110389807B (zh) * | 2019-07-23 | 2022-10-25 | 北京字节跳动网络技术有限公司 | 一种界面翻译方法、装置、电子设备及存储介质 |
US11132418B2 (en) * | 2019-08-01 | 2021-09-28 | Kindest, Inc. | Systems and methods for generating floating button interfaces on a web browser |
US11172014B2 (en) * | 2019-08-21 | 2021-11-09 | Open Text Sa Ulc | Smart URL integration using serverless service |
US11727083B2 (en) * | 2019-09-13 | 2023-08-15 | Oracle International Corporation | System and method for automatic selection for dynamic site compilation within a cloud-based content hub environment |
US11372947B2 (en) * | 2019-09-13 | 2022-06-28 | Oracle International Corporation | System and method for automatic selection for dynamic site compilation within a cloud-based content hub environment |
US11645047B2 (en) | 2019-09-13 | 2023-05-09 | Axure Software Solutions, Inc. | Focused specification generation for interactive designs |
US11853806B2 (en) | 2019-09-27 | 2023-12-26 | Cloudflare, Inc. | Cloud computing platform that executes third-party code in a distributed cloud computing network and uses a distributed data store |
US11853752B2 (en) * | 2019-09-30 | 2023-12-26 | EMC IP Holding Company LLC | Migration of web applications between different web application frameworks |
US10997341B1 (en) * | 2019-12-12 | 2021-05-04 | Salesforce.Com, Inc. | System editing plugin |
AU2020100253A4 (en) * | 2020-02-21 | 2020-03-26 | Soul & Wolf Pty Ltd | Automation of CMS Development for a Website or Web Application |
US11023558B1 (en) | 2020-04-03 | 2021-06-01 | International Business Machines Corporation | Executing functions on-demand on a server utilizing web browsers |
CN111625222B (zh) * | 2020-05-26 | 2023-08-04 | 北京互金新融科技有限公司 | 前端代码的线上验证***及验证方法 |
US11553030B2 (en) * | 2020-06-01 | 2023-01-10 | Microsoft Technology Licensing, Llc | Service worker configured to serve multiple single page applications |
US11848084B1 (en) * | 2020-07-23 | 2023-12-19 | Express Scripts Strategic Development, Inc. | Automated on-demand generation of custom physical labels for medication containers |
US11204975B1 (en) * | 2020-08-10 | 2021-12-21 | Coupang Corp. | Program interface remote management and provisioning |
US11762531B2 (en) * | 2020-10-28 | 2023-09-19 | Axure Software Solutions, Inc. | Stateful widget container management for interactive designs |
US11321412B1 (en) * | 2020-11-04 | 2022-05-03 | Capital One Services, Llc | Customized navigation flow |
US11726764B2 (en) | 2020-11-11 | 2023-08-15 | Nutanix, Inc. | Upgrade systems for service domains |
US11665221B2 (en) | 2020-11-13 | 2023-05-30 | Nutanix, Inc. | Common services model for multi-cloud platform |
US11271987B1 (en) * | 2020-11-26 | 2022-03-08 | Digital.Ai Software, Inc. | Universal webhook connectivity via multi-step HTTP transformation |
CN112596719B (zh) * | 2020-12-25 | 2024-07-05 | 中国农业银行股份有限公司 | 一种生成前后端代码的方法和*** |
US11175972B1 (en) | 2021-02-24 | 2021-11-16 | Contentful GmbH | Application framework for integrating APPs for editing content of a content management system |
US11736585B2 (en) | 2021-02-26 | 2023-08-22 | Nutanix, Inc. | Generic proxy endpoints using protocol tunnels including life cycle management and examples for distributed cloud native services and applications |
US11824773B2 (en) | 2021-03-30 | 2023-11-21 | Amazon Technologies, Inc. | Dynamic routing for peered virtual routers |
US11907402B1 (en) * | 2021-04-28 | 2024-02-20 | Wells Fargo Bank, N.A. | Computer-implemented methods, apparatuses, and computer program products for frequency based operations |
CN113176878B (zh) * | 2021-06-30 | 2021-10-08 | 深圳市维度数据科技股份有限公司 | 自动查询方法、装置和设备 |
US11558448B1 (en) * | 2021-09-22 | 2023-01-17 | International Business Machines Corporation | Sparse information sharing system |
US11562043B1 (en) * | 2021-10-29 | 2023-01-24 | Shopify Inc. | System and method for rendering webpage code to dynamically disable an element of template code |
US11989255B2 (en) * | 2021-12-30 | 2024-05-21 | Monday.com Ltd. | Client-side sorting and updating of paginated data obtained from a server |
US11922116B2 (en) * | 2022-04-11 | 2024-03-05 | Contentful GmbH | Annotations in a content model of a content management system |
US20240211528A1 (en) | 2022-12-27 | 2024-06-27 | Wix.Com Ltd. | System, method, and computer program product for securely enabling rendering of a hybrid website interface based on trusted and untrusted code components |
US20240220710A1 (en) | 2022-12-30 | 2024-07-04 | Wix.Com Ltd. | System and method for integrated temporal external resource allocation |
US12021743B1 (en) | 2023-03-27 | 2024-06-25 | Amazon Technologies, Inc. | Software-defined multi-network-segment gateways for scalable routing of traffic between customer-premise network segments and cloud-based virtual networks |
Family Cites Families (139)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6247032B1 (en) * | 1997-06-19 | 2001-06-12 | International Business Machines Corp. | Automated system and method for approving web site content |
WO2000050969A2 (en) * | 1999-02-26 | 2000-08-31 | Henry Haugland | Mass generation of individual virtual servers, virtual web sites and virtual web objects |
US7596606B2 (en) * | 1999-03-11 | 2009-09-29 | Codignotto John D | Message publishing system for publishing messages from identified, authorized senders |
US6636242B2 (en) * | 1999-08-31 | 2003-10-21 | Accenture Llp | View configurer in a presentation services patterns environment |
US7289964B1 (en) * | 1999-08-31 | 2007-10-30 | Accenture Llp | System and method for transaction services patterns in a netcentric environment |
US6728762B1 (en) * | 2000-01-04 | 2004-04-27 | International Business Machines Corporation | System and method for browser definition of workflow documents |
US8065399B2 (en) * | 2000-04-17 | 2011-11-22 | Circadence Corporation | Automated network infrastructure test and diagnostic system and method therefor |
US20020065851A1 (en) * | 2000-06-02 | 2002-05-30 | Watson Emerson C. | System and method for creating a website |
US6732332B1 (en) * | 2000-08-28 | 2004-05-04 | Und Aerospace Foundation | Automated web site creation system |
US6901424B1 (en) * | 2000-10-10 | 2005-05-31 | Markettools, Inc. | System and method for creating a sample pool for a web-based survey |
US20020099738A1 (en) * | 2000-11-22 | 2002-07-25 | Grant Hugh Alexander | Automated web access for back-end enterprise systems |
JP2002202937A (ja) * | 2000-12-28 | 2002-07-19 | Ibi Kk | ウェブサイト自動作成装置、ウェブサイト自動作成システム、ウェブサイト自動作成方法、及び、記録媒体 |
US20020165936A1 (en) * | 2001-01-25 | 2002-11-07 | Victor Alston | Dynamically branded web sites |
JP2004530191A (ja) * | 2001-02-22 | 2004-09-30 | アクセンチュア グローバル サービスィズ ゲーエムベーハー | ウェブ・サービスで構成された、インタネット・ホスティング・ビジネス・アプリケーションの開発システム |
US8601492B2 (en) * | 2001-03-31 | 2013-12-03 | Siebel Systems, Inc. | User interface for multi-channel communication |
US7546576B2 (en) * | 2001-06-15 | 2009-06-09 | Lightsurf Technology, Inc. | Software framework for web-based applications |
US7000218B2 (en) * | 2001-06-29 | 2006-02-14 | International Business Machines Corporation | System and method for developing custom programmable tags |
US6985939B2 (en) * | 2001-09-19 | 2006-01-10 | International Business Machines Corporation | Building distributed software services as aggregations of other services |
US7178108B1 (en) * | 2001-12-28 | 2007-02-13 | Sprint Communications Company L.P. | System and method for development, maintenance and modification of multiple web sites |
JP2004005527A (ja) * | 2002-03-28 | 2004-01-08 | Yosuke Hiratsuka | 階層型サイト情報作成プログラム |
JP2004062402A (ja) * | 2002-07-26 | 2004-02-26 | Fujitsu Ltd | タイムアウト管理システム、タイムアウト管理サーバ、およびタイムアウト管理プログラム |
CA2406876A1 (en) * | 2002-10-04 | 2004-04-04 | Ibm Canada Limited-Ibm Canada Limitee | Method and apparatus for managing a collection of portlets in a portal server |
US7240077B1 (en) * | 2002-12-30 | 2007-07-03 | Amazon.Com, Inc. | Web site content change management |
US7062506B2 (en) * | 2003-01-24 | 2006-06-13 | The Cobalt Group, Inc. | Staged publication and management of dynamic webpages |
US7613687B2 (en) * | 2003-05-30 | 2009-11-03 | Truelocal Inc. | Systems and methods for enhancing web-based searching |
US9778919B2 (en) * | 2003-06-27 | 2017-10-03 | Adobe Systems Incorporated | Dual context interaction with a content object for facilitating content creation and software development |
US20040268238A1 (en) * | 2003-06-30 | 2004-12-30 | Peiya Liu | Systems and methods for processing documents using an XML-based process flow description language |
US7308643B1 (en) * | 2003-07-03 | 2007-12-11 | Google Inc. | Anchor tag indexing in a web crawler system |
US7403491B2 (en) * | 2004-04-15 | 2008-07-22 | Alcatel Lucent | Framework for template-based retrieval of information from managed entities in a communication network |
JP2006146506A (ja) * | 2004-11-18 | 2006-06-08 | Image:Kk | Webサイト更新システム、Webサイト更新方法およびWebサイト更新プログラム |
US8019749B2 (en) * | 2005-03-17 | 2011-09-13 | Roy Leban | System, method, and user interface for organizing and searching information |
US7689663B2 (en) * | 2005-03-24 | 2010-03-30 | Hewlett-Packard Development Company, L.P. | Embedded web-based management method |
US7536641B2 (en) * | 2005-04-29 | 2009-05-19 | Google Inc. | Web page authoring tool for structured documents |
US7734644B2 (en) * | 2005-05-06 | 2010-06-08 | Seaton Gras | System and method for hierarchical information retrieval from a coded collection of relational data |
US7734722B2 (en) * | 2005-06-02 | 2010-06-08 | Genius.Com Incorporated | Deep clickflow tracking |
CA2622315C (en) * | 2005-08-17 | 2017-02-21 | Wideport.Com Inc. | Automatic website generator |
US8117531B1 (en) * | 2005-09-23 | 2012-02-14 | Google Inc. | Interpreted language translation system and method |
US8301997B2 (en) * | 2006-01-10 | 2012-10-30 | International Business Machines Corporation | System and method for serving multiple data objects and formatting functions in a single request |
GB2434947B (en) * | 2006-02-02 | 2011-01-26 | Identum Ltd | Electronic data communication system |
US20070220419A1 (en) * | 2006-03-10 | 2007-09-20 | Web.Com, Inc. | Systems and Methods of Providing Web Content to Multiple Browser Device Types |
US7974956B2 (en) * | 2006-07-21 | 2011-07-05 | Yahoo! Inc. | Authenticating a site while protecting against security holes by handling common web server configurations |
US20080071929A1 (en) * | 2006-09-18 | 2008-03-20 | Yann Emmanuel Motte | Methods and apparatus for selection of information and web page generation |
US20090210631A1 (en) * | 2006-09-22 | 2009-08-20 | Bea Systems, Inc. | Mobile application cache system |
GB0622823D0 (en) * | 2006-11-15 | 2006-12-27 | British Broadcasting Corp | Accessing content |
US20080133647A1 (en) * | 2006-11-17 | 2008-06-05 | Mehrak Hamzeh | System and method for delivering web content to a mobile network |
US9524353B2 (en) * | 2007-02-09 | 2016-12-20 | Nokia Technologies Oy | Method and system for providing portions of information content to a client device |
US20080243852A1 (en) * | 2007-03-26 | 2008-10-02 | International Business Machines Corporation | System and Methods for Enabling Collaboration in Online Enterprise Applications |
US8499237B2 (en) * | 2007-03-29 | 2013-07-30 | Hiconversion, Inc. | Method and apparatus for application enabling of websites |
EP2151064B1 (en) * | 2007-05-03 | 2015-06-24 | 3Dlabs Inc., Ltd. | Method for remotely configuring user interfaces for portable devices |
US8838728B2 (en) * | 2007-05-22 | 2014-09-16 | Nokia Corporation | Method, system, apparatus, network entity and computer program product for providing a user with an editable webpage |
US10019570B2 (en) * | 2007-06-14 | 2018-07-10 | Microsoft Technology Licensing, Llc | Protection and communication abstractions for web browsers |
US8181246B2 (en) * | 2007-06-20 | 2012-05-15 | Imperva, Inc. | System and method for preventing web frauds committed using client-scripting attacks |
US8577835B2 (en) * | 2007-06-28 | 2013-11-05 | Salesforce.Com, Inc. | Method and system for sharing data between subscribers of a multi-tenant database service |
US8584094B2 (en) * | 2007-06-29 | 2013-11-12 | Microsoft Corporation | Dynamically computing reputation scores for objects |
US7779161B2 (en) * | 2007-07-24 | 2010-08-17 | Hiconversion, Inc. | Method and apparatus for general virtual application enabling of websites |
US8464228B2 (en) * | 2007-08-23 | 2013-06-11 | Accenture Global Services Limited | Binary library |
US9268849B2 (en) * | 2007-09-07 | 2016-02-23 | Alexander Siedlecki | Apparatus and methods for web marketing tools for digital archives—web portal advertising arts |
US8387006B1 (en) * | 2007-12-05 | 2013-02-26 | Adobe Systems Incorporated | System and method for authoring a web page to be run-time editable |
WO2009082653A1 (en) * | 2007-12-20 | 2009-07-02 | Hsbc Technologies Inc. | Automated methods and systems for developing and deploying projects in parallel |
JP2009176296A (ja) * | 2007-12-27 | 2009-08-06 | Nippon Institute Of Agroinformatics Ltd | Web文書編集方法 |
US7886021B2 (en) * | 2008-04-28 | 2011-02-08 | Oracle America, Inc. | System and method for programmatic management of distributed computing resources |
US8341200B2 (en) * | 2008-06-12 | 2012-12-25 | Pomian & Corella, Llc | Protecting a web application against attacks through shared files |
MY154409A (en) * | 2008-07-21 | 2015-06-15 | Secure Corp M Sdn Bhd F | Website content regulation |
WO2010011792A2 (en) * | 2008-07-22 | 2010-01-28 | Widemile Inc. | Method and system for web-site testing |
JP5476709B2 (ja) * | 2008-12-09 | 2014-04-23 | 富士通株式会社 | Webページ編集プログラム及びWebページ編集装置 |
US9691170B2 (en) * | 2009-03-18 | 2017-06-27 | Shutterfly, Inc. | Proactive creation of photo products |
GB0909695D0 (en) * | 2009-06-05 | 2009-07-22 | Maxymiser Ltd | On page console |
US9883008B2 (en) * | 2010-01-15 | 2018-01-30 | Endurance International Group, Inc. | Virtualization of multiple distinct website hosting architectures |
US8438648B2 (en) * | 2010-02-16 | 2013-05-07 | Celartem, Inc. | Preventing unauthorized font linking |
US8850219B2 (en) * | 2010-05-13 | 2014-09-30 | Salesforce.Com, Inc. | Secure communications |
JP5841535B2 (ja) * | 2010-07-25 | 2016-01-13 | 株式会社コアアプリ | ファイル公開管理コンピュータプログラム、ファイル公開管理コンピュータシステム |
US20120131645A1 (en) * | 2010-11-18 | 2012-05-24 | Harm Michael W | User Scriptable Server Initiated User Interface Creation |
US8839093B1 (en) * | 2011-01-12 | 2014-09-16 | Optimizely, Inc. | Systems and methods for website optimization |
US8910156B1 (en) * | 2011-04-29 | 2014-12-09 | Netapp, Inc. | Virtual machine dependency |
US8938791B2 (en) * | 2011-06-10 | 2015-01-20 | International Business Machines Corporation | System and method to control display of a realm name |
US8874593B2 (en) * | 2011-07-01 | 2014-10-28 | Salesforce.Com, Inc. | Testing data silo |
US8959427B1 (en) * | 2011-08-05 | 2015-02-17 | Google Inc. | System and method for JavaScript based HTML website layouts |
US8474056B2 (en) | 2011-08-15 | 2013-06-25 | Bank Of America Corporation | Method and apparatus for token-based virtual machine recycling |
US20130304604A1 (en) * | 2011-11-02 | 2013-11-14 | Michael Theodor Hoffman | Systems and methods for dynamic digital product synthesis, commerce, and distribution |
US20130117152A1 (en) * | 2011-11-03 | 2013-05-09 | Cbs Interactive, Inc. | Javascript Widget Storefront |
US8671417B2 (en) * | 2011-12-12 | 2014-03-11 | Microsoft Corporation | Lightweight framework for web applications |
US8793660B2 (en) * | 2011-12-30 | 2014-07-29 | Cellco Partnership | Automated testing of programming code for a web service |
DE102013202782A1 (de) | 2012-02-20 | 2013-08-22 | Wixpress Ltd | Server-basiertes Webseiten-Designsystem, das ein dynamisches Layout und dynamischen Inhalt integriert |
US10222926B2 (en) * | 2012-03-19 | 2019-03-05 | Citrix Systems, Inc. | Systems and methods for providing user interfaces for management applications |
US9430449B2 (en) * | 2012-03-30 | 2016-08-30 | Sdl Plc | Systems, methods, and media for managing editable previews of webpages |
US9262420B1 (en) * | 2012-04-23 | 2016-02-16 | Google Inc. | Third-party indexable text |
US20130346849A1 (en) * | 2012-06-06 | 2013-12-26 | Minds + Machines | Automatic uploading and synchronization of media assets |
US20140095463A1 (en) * | 2012-06-06 | 2014-04-03 | Derek Edwin Pappas | Product Search Engine |
US8943086B2 (en) * | 2012-06-29 | 2015-01-27 | Sap Se | Model-based backend service adaptation of business objects |
US20140047413A1 (en) * | 2012-08-09 | 2014-02-13 | Modit, Inc. | Developing, Modifying, and Using Applications |
US8522134B1 (en) * | 2012-08-13 | 2013-08-27 | Volusion, Inc. | Methods and apparatus for in-line editing of web page content with reduced disruption of logical and presentational structure of content |
US20140053060A1 (en) * | 2012-08-17 | 2014-02-20 | Launchbase, LLC | Website development tool |
US10585981B2 (en) * | 2012-09-13 | 2020-03-10 | Samir Issa | Method of data capture, storage and retrieval through user created form templates and data item templates by executing computer-executable instructions stored on a non-transitory computer-readable medium |
US9317490B2 (en) * | 2012-09-19 | 2016-04-19 | TagMan Inc. | Systems and methods for 3-tier tag container architecture |
US20140096038A1 (en) * | 2012-09-28 | 2014-04-03 | Interactive Memories, Inc. | Method for Editing Font Size for Font Arranged in a Layout on an Electronic Interface using Real Time Visual Input |
US11449952B2 (en) * | 2012-10-01 | 2022-09-20 | Oracle International Corporation | Efficiently modeling database scenarios for later use on live data |
US9195477B1 (en) * | 2012-10-09 | 2015-11-24 | Sencha, Inc. | Device profiles, deep linking, and browser history support for web applications |
US9185078B2 (en) * | 2012-12-18 | 2015-11-10 | Salesforce.Com, Inc. | Systems, methods, and apparatuses for implementing cross organizational data sharing |
US10089406B2 (en) * | 2013-01-30 | 2018-10-02 | Oracle International Corporation | Generating web pages with integrated content |
US9712593B2 (en) * | 2013-02-04 | 2017-07-18 | Oracle International Corporation | Javascript API for WebRTC |
US9307031B2 (en) * | 2013-02-04 | 2016-04-05 | Oracle International Corporation | Generic model for customizing protocol behavior through javascript |
CA3205266A1 (en) | 2013-02-10 | 2014-08-14 | Wix.Com Ltd. | Third-party application communication api |
CA3208976A1 (en) * | 2013-03-14 | 2014-09-18 | Wix.Com Ltd. | Device, system, and method of website building by utilizing data lists |
US9971790B2 (en) * | 2013-03-15 | 2018-05-15 | Google Llc | Generating descriptive text for images in documents using seed descriptors |
US20170147480A1 (en) * | 2013-04-23 | 2017-05-25 | Google Inc. | Test script generation |
US20150011338A1 (en) * | 2013-07-02 | 2015-01-08 | Jeremy Russotti | Training device |
US10362145B2 (en) * | 2013-07-05 | 2019-07-23 | The Boeing Company | Server system for providing current data and past data to clients |
US9836330B2 (en) | 2013-07-16 | 2017-12-05 | Hitachi, Ltd. | Virtual resource management tool for cloud computing service |
US9513885B2 (en) * | 2013-08-22 | 2016-12-06 | Peter Warren | Web application development platform with relationship modeling |
US20150058339A1 (en) | 2013-08-26 | 2015-02-26 | Go DaddyOperating Company, LLC | Method for automating search engine optimization for websites |
US9229702B1 (en) * | 2013-08-28 | 2016-01-05 | Lithium Technologies, Inc. | Systems and methods for application plugin deployment for websites |
US10853837B2 (en) * | 2013-10-07 | 2020-12-01 | Adobe Inc. | Integrated testing, targeting and measuring of web site components |
US9519525B2 (en) * | 2013-11-14 | 2016-12-13 | Dropbox, Inc. | File-level commenting |
US9817801B2 (en) | 2013-12-04 | 2017-11-14 | Go Daddy Operating Company, LLC | Website content and SEO modifications via a web browser for native and third party hosted websites |
US9607332B1 (en) * | 2014-02-07 | 2017-03-28 | Google Inc. | Embedded web application gallery |
MX359824B (es) | 2014-02-11 | 2018-10-11 | Wix Com Ltd | Sistema para la sincronizacion de cambios en sitios web editados y aplicaciones interactivas. |
CN106575248A (zh) * | 2014-05-18 | 2017-04-19 | 周凯 | 性能测试***和方法 |
US9954936B2 (en) | 2015-03-02 | 2018-04-24 | International Business Machines Corporation | Migrating legacy applications to a multi-tenant computing environment |
EP3304338B1 (en) | 2015-06-07 | 2024-03-06 | Wix.com Ltd. | System and method for the generation of an adaptive user interface in a website building system |
US10726371B2 (en) * | 2015-06-08 | 2020-07-28 | Sap Se | Test system using production data without disturbing production system |
US10474489B2 (en) | 2015-06-26 | 2019-11-12 | Intel Corporation | Techniques to run one or more containers on a virtual machine |
US9864735B1 (en) * | 2015-08-27 | 2018-01-09 | Google Llc | In-domain webpage editing |
US10229214B2 (en) * | 2015-12-31 | 2019-03-12 | Ca, Inc. | Dynamic web page navigation |
US10148790B2 (en) * | 2016-03-04 | 2018-12-04 | Bank Of America Corporation | Deployment of integrative HTML-based engine from an edge server |
US10684839B2 (en) * | 2016-06-15 | 2020-06-16 | Red Hat Israel, Ltd. | Plugin for software deployment |
US10678995B2 (en) * | 2016-08-12 | 2020-06-09 | Netsuite, Inc. | System and methods for control of content presented on web pages |
US20180052809A1 (en) * | 2016-08-16 | 2018-02-22 | Microsoft Technology Licensing, Llc | Inferring user interaction with an iframe |
US10025924B1 (en) * | 2016-08-26 | 2018-07-17 | Parallels IP Holdings GmbH | Taskless containers for enhanced isolation of users and multi-tenant applications |
US10223078B2 (en) * | 2016-09-29 | 2019-03-05 | Ca, Inc. | Application-type independent dynamic plug-in evaluation tool |
US20180097820A1 (en) * | 2016-10-03 | 2018-04-05 | Adobe Systems Incorporated | Managing content upload and content retrieval |
US11537272B2 (en) * | 2016-12-21 | 2022-12-27 | Aon Global Operations Se, Singapore Branch | Content management system extensions |
US10250389B2 (en) * | 2017-01-17 | 2019-04-02 | Go Daddy Operating Company, LLC | Script verification using a hash |
US10671570B2 (en) * | 2017-02-01 | 2020-06-02 | Open Text Sa Ulc | Web application open platform interface (WOPI) server architecture and applications for distributed network computing environments |
US11003668B2 (en) * | 2017-02-21 | 2021-05-11 | Sap Se | Programming language independent software testing environment |
US20180309720A1 (en) * | 2017-04-25 | 2018-10-25 | Verisign, Inc. | Systems, devices, and methods for automatic website generation and domain name suggestion |
US10572361B2 (en) * | 2017-04-28 | 2020-02-25 | The Boeing Company | Concurrent production use of a production enterprise system and testing of a modified enterprise system |
US10209966B2 (en) | 2017-07-24 | 2019-02-19 | Wix.Com Ltd. | Custom back-end functionality in an online website building environment |
US10866935B2 (en) * | 2017-08-18 | 2020-12-15 | Benjamin J. Chung | File management method |
US20200057714A1 (en) * | 2018-08-17 | 2020-02-20 | Google Llc | Testing data changes in production systems |
-
2018
- 2018-07-24 US US16/044,461 patent/US10209966B2/en active Active
- 2018-07-24 CA CA3060362A patent/CA3060362A1/en active Pending
- 2018-07-24 EP EP23180890.8A patent/EP4235461A3/en active Pending
- 2018-07-24 WO PCT/IB2018/001028 patent/WO2019038588A1/en unknown
- 2018-07-24 US US16/044,383 patent/US10915300B2/en active Active
- 2018-07-24 EP EP18848030.5A patent/EP3593254B1/en active Active
- 2018-07-24 US US16/044,469 patent/US10719300B2/en active Active
- 2018-07-24 US US16/044,365 patent/US10521198B2/en active Active
- 2018-07-24 ES ES18848030T patent/ES2970458T3/es active Active
- 2018-07-24 AU AU2018319444A patent/AU2018319444B2/en active Active
- 2018-07-24 US US16/044,457 patent/US11106860B2/en active Active
- 2018-07-24 JP JP2020503801A patent/JP2020530610A/ja active Pending
- 2018-07-24 BR BR112019024309-7A patent/BR112019024309A2/pt unknown
- 2018-07-24 US US16/044,460 patent/US10331420B2/en active Active
-
2019
- 2019-01-10 US US16/245,139 patent/US10326821B2/en active Active
- 2019-04-19 US US16/389,604 patent/US10379820B1/en active Active
- 2019-04-19 US US16/389,613 patent/US10397305B1/en active Active
-
2020
- 2020-01-08 IL IL271915A patent/IL271915A/en unknown
-
2021
- 2021-08-29 US US17/460,225 patent/US11875104B2/en active Active
-
2024
- 2024-01-12 AU AU2024200221A patent/AU2024200221A1/en active Pending
- 2024-01-15 US US18/412,656 patent/US20240220706A1/en active Pending
- 2024-03-14 JP JP2024040504A patent/JP2024075645A/ja active Pending
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2024075645A (ja) | 仮想ウェブページのプレビュー中におけるデータベースの編集 | |
US20200257437A1 (en) | Methods and systems for web content generation | |
Esposito | Programming Microsoft ASP. NET MVC | |
Paz | Beginning ASP. NET MVC 4 | |
Ragupathi | Learning ASP. NET Core MVC Programming | |
Manfield | Joomla for Developers | |
Vogelsteller et al. | Meteor: Full-Stack Web Application Development | |
Bowden | Visualforce Development Cookbook | |
Prettyman et al. | Interfaces, Platforms, and Three-Tier Programming | |
Robinson et al. | Introducing Meteor | |
Hertel | Aspects of AJAX | |
Latifi | Architecture patterns in web applications and implementation of find local food |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20240415 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20240415 |
|
A871 | Explanation of circumstances concerning accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A871 Effective date: 20240508 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20240702 |